如何在 Rocky Linux 9 上创建交换空间

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

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

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

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

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

    $ sudo swapon --show
    如果您没有得到任何输出,这意味着您的系统当前没有可用的交换空间。

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

    $ free -h
    显示:
                   total        used        free      shared  buff/cache   available
    Mem:           1.7Gi       173Mi       1.2Gi       9.0Mi       336Mi       1.4Gi
    Swap:             0B          0B          0B
    正如您在输出的“Swap”行中看到的,系统上没有处于活动状态的交换。

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

    $ df -h
    显示
    Filesystem      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
    显示:
    -rw------- 1 root root 2.0G Sep 13 17:52 /swapfile
    正如您所看到的,只有root用户启用了读取和写入标志。

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

    $ sudo mkswap /swapfile
    显示:
    Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
    no label, UUID=585e8b33-30fa-481f-af61-37b13326545b
    标记文件后,我们可以启用交换文件,允许我们的系统开始使用它:

    $ sudo swapon /swapfile
    通过键入以下内容验证交换是否可用:

    $ sudo swapon --show
    显示:
    NAME      TYPE  SIZE USED PRIO
    /swapfile file 2G   0B   -2
    我们可以再次检查实用程序的输出free以证实我们的发现:

    $ free -h
    显示:
                   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 空间。根据您的应用程序的内存配置文件或您使用服务器的目的,这在某些情况下可能会更好。

    我们可以通过输入以下内容来查看当前的交换值:

    $ cat /proc/sys/vm/swappiness
    显示:
    60
    对于台式机来说,swappiness 设置为 60 并不是一个坏值。对于服务器,您可能希望将其移近 0。

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

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

    $ sudo sysctl vm.swappiness=10
    显示:
    vm.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
    在底部,您可以添加:

    /etc/sysctl.conf
    vm.swappiness=10
    完成后保存并关闭文件。如果您使用的是nano,则可以通过按 CTRL + X 来保存并退出,然后在出现提示符时按 Y 然后按回车。

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

    这是有关文件系统的访问数据。通常,查找成本非常高并且请求非常频繁,因此对于系统来说,缓存是一件非常好的事情。您可以通过再次查询文件系统来查看当前值proc:

    $ cat /proc/sys/vm/vfs_cache_pressure
    显示:
    100
    根据当前配置,我们的系统从缓存中删除索引节点信息的速度太快。我们可以通过键入以下内容将其设置为更保守的设置,例如 50:

    $ sudo sysctl vm.vfs_cache_pressure=50
    显示:
    vm.vfs_cache_pressure = 50
    再次强调,这仅对我们当前的会话有效。我们可以通过将其添加到我们的配置文件中来更改它,就像我们对交换设置所做的那样:

    $ sudo nano /etc/sysctl.conf
    在底部添加指定新值的行:

    /etc/sysctl.conf
    vm.vfs_cache_pressure=50
    完成后保存并关闭文件。

    小结
    遵循本指南中的步骤将为您提供一些喘息空间,以防出现内存不足异常。交换空间对于避免其中一些常见问题非常有用。

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


    还没有评论

    Please publish modules in offcanvas position.