如何在 Ubuntu 14.04 上添加 Swap如何在 Ubuntu 14.04 上添加 Swap如何在 Ubuntu 14.04 上添加 Swap如何在 Ubuntu 14.04 上添加 Swap
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Ubuntu 14.04 上添加 Swap

介绍

提高服务器响应能力和防止应用程序内存不足错误的最简单方法之一是添加一些交换空间。交换区是硬盘驱动器上的一个区域,被指定为操作系统可以临时存储无法再保存在 RAM 中的数据的地方。

基本上,这使您能够增加服务器可以保存在其工作“内存”中的信息量,但有一些注意事项。硬盘驱动器上的空间将主要在 RAM 中的空间不再足够用于数据时使用.

写入磁盘的信息将比保存在 RAM 中的信息慢,但操作系统更愿意在内存中继续运行应用程序数据,并使用交换来交换较旧的数据。总的来说,将交换空间作为系统 RAM 耗尽时的后备是一个很好的安全网。

在本指南中,我们将介绍如何在 Ubuntu 14.04 服务器上创建和启用交换文件。

尽管通常建议对使用传统旋转硬盘驱动器的系统进行交换,但将交换与 SSD 一起使用可能会导致硬件性能随着时间的推移而退化。出于这一考虑,我们不建议在 DigitalOcean 或任何其他使用 SSD 存储的提供商上启用交换。这样做会影响您和您的邻居的底层硬件的可靠性。

如果您需要提高服务器性能,我们建议升级您的 Droplet。这通常会带来更好的结果,并且会降低导致可能影响您的服务的硬件问题的可能性。

检查系统的交换信息

在我们开始之前,我们将查看我们的操作系统,看看我们是否已经有一些可用的交换空间。我们可以有多个交换文件或交换分区,但通常一个就足够了。

我们可以通过键入以下内容查看系统是否有任何已配置的交换:

sudo swapon -s
Filename				Type		Size	Used	Priority

如果您只取回表的标题,如我上面所示,则您当前没有启用任何交换空间。

另一种更熟悉的检查交换空间的方法是使用 free 实用程序,它向我们显示系统内存使用情况。我们可以通过键入以下命令以兆字节为单位查看当前内存和交换使用情况:

<前>

正如你在上面看到的,我们在系统中的总交换空间是“0”。这与我们在前面的命令中看到的相符。

检查硬盘分区上的可用空间

为交换分配空间的典型方法是使用专用于该任务的单独分区。然而,改变分区方案并不总是可能的。我们可以轻松地创建一个驻留在现有分区上的交换文件。

在我们这样做之前,我们应该了解我们当前的磁盘使用情况。我们可以通过键入以下内容来获取此信息:

<前>

正如您在第一行看到的那样,我们的硬盘驱动器分区有 55 GB 可用空间,因此我们有大量空间可以使用。但是,这是在一个全新的中型 VPS 实例上,因此您的实际使用情况可能会有很大不同。

尽管对于交换空间的合适大小有很多意见,但这实际上取决于您的个人喜好和您的应用程序要求。通常,等于或两倍于系统 RAM 量的量是一个很好的起点。

由于我的系统有 4 GB 的 RAM,加倍会占用我不愿意放弃的大量磁盘空间,因此我将创建一个 4 GB 的交换空间来匹配我系统的 RAM。

创建交换文件

现在我们知道可用的硬盘空间,我们可以着手在我们的文件系统中创建一个交换文件。

我们将在我们的根 (/) 目录中创建一个名为 swapfile 的文件。该文件必须为我们的交换文件分配我们想要的空间量。有两种主要方法可以做到这一点:

传统的、缓慢的方式

传统上,我们会使用 dd 命令创建一个具有预分配空间的文件。这个多功能的磁盘实用程序从一个位置写入到另一个位置。

我们可以使用它从位于 /dev/zero 的 Linux 系统中的特殊设备向文件写入零,该设备会根据请求吐出尽可能多的零。

我们通过结合使用 bs 块大小和 count 块数来指定文件大小。我们分配给每个参数的内容几乎完全是任意的。重要的是它们相乘的结果是什么。

例如,在我们的示例中,我们希望创建一个 4 GB 的文件。我们可以通过指定 1 GB 的块大小和 4 的计数来做到这一点:

sudo dd if=/dev/zero of=/swapfile bs=1G count=4
4+0 records in
4+0 records out
4294967296 bytes (4.3 GB) copied, 18.6227 s, 231 MB/s

在按 ENTER 之前检查您的命令,因为如果您将 of(代表输出文件)指向错误的位置,这可能会破坏数据。

我们可以通过键入以下内容看到已分配 4 GB:

<前>

如果您已经完成了上面的命令,您可能会注意到它花了很长时间。事实上,您可以在输出中看到我的系统用了 18 秒来创建文件。那是因为它必须将 4 GB 的零写入磁盘。

如果您想了解如何更快地创建文件,请删除该文件并按照以下步骤操作:

sudo rm /swapfile

更快的方式

获取相同文件的更快方法是使用 fallocate 程序。此命令会立即创建一个预先分配大小的文件,而无需实际写入虚拟内容。

我们可以通过键入以下内容来创建一个 4 GB 的文件:

sudo fallocate -l 4G /swapfile

提示几乎会立即返回给您。我们可以通过键入以下内容来验证是否保留了正确的空间量:

<前>

如您所见,我们的文件创建时预留了正确的空间量。

启用交换文件

现在,我们的文件已创建,但我们的系统不知道这应该用于交换。我们需要告诉我们的系统将该文件格式化为交换文件,然后启用它。

不过,在我们这样做之前,我们需要调整文件的权限,以便除 root 之外的任何人都无法读取它。允许其他用户读取或写入此文件将带来巨大的安全风险。我们可以通过键入以下内容来锁定权限:

sudo chmod 600 /swapfile

通过键入以下内容验证文件是否具有正确的权限:

<前>

如您所见,只有根用户的列启用了读写标志。

现在我们的文件更安全了,我们可以通过键入以下命令告诉我们的系统设置交换空间:

sudo mkswap /swapfile
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=e2f1e9cf-c0a9-4ed4-b8ab-714b8a7d6944

我们的文件现在可以用作交换空间了。我们可以通过键入以下内容来启用它:

sudo swapon /swapfile

我们可以通过检查我们的系统现在是否报告交换空间来验证该过程是否成功:

<前>

我们这里有一个新的交换文件。我们可以再次使用 free 实用程序来证实我们的发现:

<前>

我们的交换已成功设置,我们的操作系统将在必要时开始使用它。

使交换文件永久化

我们启用了交换文件,但是当我们重新启动时,服务器不会自动启用该文件。我们可以通过修改 fstab 文件来改变它。

在文本编辑器中使用 root 权限编辑文件:

sudo nano /etc/fstab

在文件的底部,您需要添加一行,告诉操作系统自动使用您创建的文件:

/swapfile   none    swap    sw    0   0

完成后保存并关闭文件。

调整您的交换设置

您可以配置几个选项,这些选项会在处理交换时对系统性能产生影响。

swappiness 参数配置系统将数据从 RAM 交换到交换空间的频率。这是一个介于 0 和 100 之间的值,表示百分比。

如果值接近于零,除非绝对必要,否则内核不会将数据交换到磁盘。请记住,与交换文件的交互是“昂贵的”,因为它们比与 RAM 交互花费的时间长得多,并且会导致性能显着降低。告诉系统不要太依赖交换通常会使您的系统更快。

接近 100 的值将尝试将更多数据放入交换区,以保持更多 RAM 空间可用。根据您的应用程序的内存配置文件或您使用服务器的用途,在某些情况下这可能会更好。

我们可以通过键入以下内容来查看当前的 swappiness 值:

cat /proc/sys/vm/swappiness
60

对于台式机,swappiness 设置为 60 是一个不错的值。对于 VPS 系统,我们可能希望将其移近 0。

我们可以使用 sysctl 命令将 swappiness 设置为不同的值。

例如,要将 swappiness 设置为 10,我们可以键入:

sudo sysctl vm.swappiness=10
vm.swappiness = 10

此设置将一直保留到下一次重新启动。我们可以通过将行添加到我们的 /etc/sysctl.conf 文件来在重新启动时自动设置此值:

sudo nano /etc/sysctl.conf

在底部,您可以添加:

vm.swappiness=10

完成后保存并关闭文件。

您可能想要修改的另一个相关值是 vfs_cache_pressure。此设置配置系统将选择在其他数据上缓存多少 inode 和 dentry 信息。

基本上,这是关于文件系统的访问数据。这通常是非常昂贵的查找和非常频繁的请求,所以它是您的系统缓存的好东西。您可以通过再次查询 proc 文件系统来查看当前值:

cat /proc/sys/vm/vfs_cache_pressure
100

由于当前配置,我们的系统从缓存中删除 inode 信息的速度过快。我们可以通过键入以下内容将其设置为更保守的设置,如 50:

sudo sysctl vm.vfs_cache_pressure=50
vm.vfs_cache_pressure = 50

同样,这仅对我们当前的会话有效。我们可以通过将它添加到我们的配置文件来更改它,就像我们对 swappiness 设置所做的那样:

sudo nano /etc/sysctl.conf

在底部,添加指定新值的行:

vm.vfs_cache_pressure = 50

完成后保存并关闭文件。

结论

遵循本指南中的步骤将为您在 RAM 使用方面提供一些喘息的空间。交换空间在避免一些常见问题方面非常有用。

如果您遇到 OOM(内存不足)错误,或者如果您发现您的系统无法使用您需要的应用程序,最好的解决方案是优化您的应用程序配置或升级您的服务器。但是,配置交换空间可以为您提供更大的灵活性,并可以帮助您在功能较弱的服务器上争取时间。

贾斯汀·埃林伍德

©2015-2025 艾丽卡 support@alaica.com