原帖地址: https://cn.linux-console.net/?p=6587

介绍

防止应用程序内存不足错误的一种方法是向服务器添加一些交换空间。在本指南中,我们将介绍如何将交换文件添加到 Rocky Linux 9 服务器。

什么是掉期?

Swap 是硬盘驱动器存储的一部分,已留出供操作系统临时存储无法再保存在 RAM 中的数据。这使您可以增加服务器可以保留在其工作内存中的信息量,但有一些注意事项。当 RAM 中不再有足够的空间来保存正在使用的应用程序数据时,将主要使用硬盘驱动器上的交换空间。

写入磁盘的信息将比保存在 RAM 中的信息慢得多,但操作系统更愿意在内存中继续运行应用程序数据并使用交换来交换较旧的数据。总的来说,将交换空间作为系统 RAM 耗尽时的后备方案可以成为一个很好的安全网,以防止在具有可用非 SSD 存储的系统上出现内存不足异常。

第 1 步 – 检查系统的交换信息

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

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

sudo swapon --show

如果您没有返回任何输出,这意味着您的系统当前没有可用的交换空间。

您可以使用 free 实用程序验证没有活动交换:

free -h

Output               total        used        free      shared  buff/cache   available
Mem:           1.7Gi       173Mi       1.2Gi       9.0Mi       336Mi       1.4Gi
Swap:             0B          0B          0B

正如您在输出的交换行中所见,系统上没有活动交换。

步骤 2 – 检查硬盘分区上的可用空间

在我们创建我们的交换文件之前,我们将检查我们当前的磁盘使用情况以确保我们有足够的空间。通过输入以下内容来执行此操作:

df -h

OutputFilesystem      Size  Used Avail Use% Mounted on
devtmpfs        855M     0  855M   0% /dev
tmpfs           888M     0  888M   0% /dev/shm
tmpfs           355M  9.4M  346M   3% /run
/dev/vda1        59G  1.4G   58G   3% /
/dev/vda2       994M  155M  840M  16% /boot
/dev/vda15      100M  7.0M   93M   7% /boot/efi
tmpfs           178M     0  178M   0% /run/user/0

在本例中,Mounted on 列中带有 / 的设备就是我们的磁盘。在这个例子中我们有足够的可用空间(只使用了 1.4G)。您的用法可能会有所不同。

尽管对于交换空间的合适大小有很多意见,但这实际上取决于您的个人喜好和您的应用程序要求。通常,等于或两倍于系统 RAM 量的量是一个很好的起点。另一个好的经验法则是,如果您只是将它用作 RAM 后备,那么任何超过 4G 的交换空间都可能是不必要的。

第 3 步 – 创建交换文件

现在我们知道可用的硬盘空间,我们可以在我们的文件系统上创建一个交换文件。我们将在我们的根 (/) 目录中分配一个我们想要的名为 swapfile 的文件。

创建交换文件的最佳方法是使用 fallocate 程序。此命令立即创建指定大小的文件。

由于我们示例中的服务器有 2G RAM,因此我们将在本指南中创建一个 2G 文件。调整这个以满足您自己的服务器的需要:

sudo fallocate -l 1G /swapfile

我们可以通过键入以下内容来验证是否保留了正确的空间量:

ls -lh /swapfile

-rw-r--r--. 1 root root 2.0G Sep 13 17:52 /swapfile

我们的文件已创建,并预留了正确的空间量。

第 4 步 – 启用交换文件

现在我们有了一个正确大小的可用文件,我们需要实际将其转换为交换空间。

首先,我们需要锁定文件的权限,以便只有具有 root 权限的用户才能读取内容。这会阻止普通用户访问该文件,这会产生重大的安全隐患。

通过键入以下命令使文件只能由 root 访问:

sudo chmod 600 /swapfile

通过键入以下内容验证权限更改:

ls -lh /swapfile

Output-rw------- 1 root root 2.0G Sep 13 17:52 /swapfile

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

我们现在可以通过键入以下内容将文件标记为交换空间:

sudo mkswap /swapfile

OutputSetting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=585e8b33-30fa-481f-af61-37b13326545b

标记文件后,我们可以启用交换文件,让我们的系统开始使用它:

sudo swapon /swapfile

通过键入以下内容验证交换是否可用:

sudo swapon --show

OutputNAME      TYPE  SIZE USED PRIO
/swapfile file 2G   0B   -2

我们可以再次检查 free 实用程序的输出以证实我们的发现:

free -h

Output               total        used        free      shared  buff/cache   available
Mem:           1.7Gi       172Mi       1.2Gi       9.0Mi       338Mi       1.4Gi
Swap:          2.0Gi          0B       2.0Gi

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

第 5 步 – 使交换文件永久化

我们最近的更改为当前会话启用了交换文件。但是,如果我们重新启动,服务器将不会自动保留交换设置。我们可以通过将交换文件添加到我们的 /etc/fstab 文件来更改它。

备份 /etc/fstab 文件以防出错:

sudo cp /etc/fstab /etc/fstab.bak

通过键入以下内容将交换文件信息添加到 /etc/fstab 文件的末尾:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

接下来我们将回顾一些我们可以更新的设置来调整我们的交换空间。

第 6 步 – 调整您的交换设置

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

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

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

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

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

cat /proc/sys/vm/swappiness

Output60

对于台式机,swappiness 设置为 60 是一个不错的值。对于服务器,您可能希望将其移近 0。

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

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

sudo sysctl vm.swappiness=10

Outputvm.swappiness = 10

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

Rocky Linux 9 自带的默认文本编辑器是 vi。 vi 是一个非常强大的文本编辑器,但对于缺乏使用经验的用户来说可能有点迟钝。你可能想要安装一个对用户更友好的编辑器,例如 nano 以方便在你的 Rocky Linux 9 服务器上编辑配置文件:

sudo dnf install nano

现在你可以使用 nano 来编辑 sysctl.conf 文件:

sudo nano /etc/sysctl.conf

在底部,您可以添加:

vm.swappiness=10

完成后保存并关闭文件。如果您使用的是 nano,您可以按 CTRL + X 保存并退出,然后在出现提示时,按 Y 然后回车。

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

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

cat /proc/sys/vm/vfs_cache_pressure

Output100

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

sudo sysctl vm.vfs_cache_pressure=50

Outputvm.vfs_cache_pressure = 50

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

sudo nano /etc/sysctl.conf

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

vm.vfs_cache_pressure=50

完成后保存并关闭文件。

结论

遵循本指南中的步骤将为您在可能导致内存不足异常的情况下提供一些喘息的空间。交换空间对于避免其中一些常见问题非常有用。

如果您遇到内存不足的错误,或者如果您发现您的系统无法使用您需要的应用程序,最好的解决方案是优化您的应用程序配置或升级您的服务器。

标签: none

添加新评论