如何在 Rocky Linux 9 上添加交换空间

简介

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

什么是交换?

_Swap_是为操作系统预留的一部分硬盘存储空间,用于临时存储 RAM 中无法再保存的数据。这可以增加服务器工作内存中的信息量,但有一些注意事项。硬盘上的交换空间主要用于 RAM 中不再有足够空间保存使用中的应用程序数据时。

写入磁盘的信息比保存在内存中的信息要慢得多,但操作系统更愿意将运行中的应用程序数据保存在内存中,而使用交换空间来保存较旧的数据。总的来说,在系统内存耗尽的情况下,将交换空间作为后备空间,可以很好地防止系统出现内存不足的异常情况。

步骤 1 - 检查系统的交换信息

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

我们可以通过键入 "swap "查看系统是否配置了交换机:

1sudo swapon --show

如果没有任何输出结果,说明系统目前没有可用的交换空间。

您可以使用 free 工具验证是否存在活动交换:

1free -h
1[secondary_label Output]
2               total used free shared buff/cache available
3Mem:           1.7Gi 173Mi 1.2Gi 9.0Mi 336Mi 1.4Gi
4Swap:             0B 0B 0B

从输出结果的 Swap 行可以看到,系统上没有激活交换。

第 2 步 - 检查硬盘分区的可用空间

在创建交换文件之前,我们先检查一下当前的磁盘使用情况,确保有足够的空间。请输入

1df -h
1[secondary_label Output]
2Filesystem Size Used Avail Use% Mounted on
3devtmpfs 855M 0 855M 0% /dev
4tmpfs 888M 0 888M 0% /dev/shm
5tmpfs 355M 9.4M 346M 3% /run
6/dev/vda1 59G 1.4G 58G 3% /
7/dev/vda2 994M 155M 840M 16% /boot
8/dev/vda15 100M 7.0M 93M 7% /boot/efi
9tmpfs 178M 0 178M 0% /run/user/0

在本例中,"Mounted on "栏中带有"/"的设备就是我们的磁盘。在本例中,我们有足够的可用空间(仅使用了 1.4G)。您的使用情况可能会有所不同。

虽然关于交换空间的适当大小众说纷纭,但这确实取决于你的个人喜好和应用程序要求。一般来说,与系统内存容量相等或两倍是一个不错的起点。另一个好的经验法则是,如果你只是将交换空间用作内存的备用空间,那么超过 4G 的交换空间可能就没有必要了。

第 3 步 - 创建交换文件

现在我们知道了可用的硬盘空间,可以在文件系统中创建一个交换文件。我们将在根目录(/)下分配一个大小与我们所需的大小相同的文件,名为 "swapfile"。

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

由于示例中的服务器有 2G 内存,我们将在本指南中创建一个 2G 文件。请根据自己服务器的需要进行调整:

1sudo fallocate -l 1G /swapfile

我们可以通过键入来验证是否预留了正确的空间:

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

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

第 4 步 - 启用交换文件

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

首先,我们需要锁定文件的权限,只有拥有root 权限的用户才能读取文件内容。这样,普通用户就无法访问该文件,因为这将产生重大的安全影响。

键入 "root**",使文件只能被** root** 访问:

1sudo chmod 600 /swapfile

输入验证权限更改:

1ls -lh /swapfile
1[secondary_label Output]
2-rw------- 1 root root 2.0G Sep 13 17:52 /swapfile

可以看到,只有 root 用户启用了读写标志。

现在,我们可以输入

1sudo mkswap /swapfile
1[secondary_label Output]
2Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
3no label, UUID=585e8b33-30fa-481f-af61-37b13326545b

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

1sudo swapon /swapfile

通过输入验证交换是否可用:

1sudo swapon --show
1[secondary_label Output]
2NAME TYPE SIZE USED PRIO
3/swapfile file 2G 0B   -2

我们可以再次检查 free 工具的输出,以证实我们的发现:

1free -h
1[secondary_label Output]
2               total used free shared buff/cache available
3Mem:           1.7Gi 172Mi 1.2Gi 9.0Mi 338Mi 1.4Gi
4Swap:          2.0Gi 0B 2.0Gi

我们的交换系统已经设置成功,我们的操作系统将根据需要开始使用它。

第 5 步 - 永久保存交换文件

我们最近的更改启用了当前会话的交换文件。不过,如果我们重新启动,服务器将不会自动保留交换设置。我们可以通过在 /etc/fstab 文件中添加 swap 文件来改变这种情况。

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

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

/etc/fstab 文件末尾添加交换文件信息,键入

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

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

第 6 步 - 调整交换设置

在处理交换时,您可以配置一些对系统性能有影响的选项。

调整交换属性

交换度 "参数用于配置系统将数据从 RAM 交换到交换空间的频率。该值介于 0 和 100 之间,代表一个百分比。

当值接近零时,除非绝对必要,内核不会将数据交换到磁盘上。请记住,与交换文件的交互是 "昂贵 "的,因为它们比与 RAM 的交互耗时更长,而且会导致性能显著下降。告诉系统不要过多依赖交换文件,通常会让系统运行得更快。

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

我们可以通过键入"...... "来查看当前的交换度值:

1cat /proc/sys/vm/swappiness
1[secondary_label Output]
260

对于台式机来说,交换性设置为 60 也不错。对于服务器,你可能希望将其接近于 0。

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

例如,要将交换度设置为 10,我们可以键入

1sudo sysctl vm.swappiness=10
1[secondary_label Output]
2vm.swappiness = 10

该设置将持续到下次重启。我们可以在/etc/sysctl.conf文件中添加这一行,在重启时自动设置该值。

Rocky Linux 9 的默认文本编辑器是 vivi 是一个功能非常强大的文本编辑器,但对于缺乏使用经验的用户来说,它可能有些笨拙。你可能需要安装一个更方便用户使用的编辑器,比如 "nano",以方便在你的洛基 Linux 9 服务器上编辑配置文件:

1sudo dnf install nano

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

1sudo nano /etc/sysctl.conf

在底部,您可以添加

1[label /etc/sysctl.conf]
2vm.swappiness=10

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

调整缓存压力设置

你可能想修改的另一个相关值是 vfs_cache_pressure。该设置用于配置系统选择缓存 inodedentry 信息而非其他数据的程度。

这是有关文件系统的访问数据。一般来说,这些数据的查询成本很高,请求频率也很高,因此系统最好将其缓存起来。你可以通过再次查询 proc 文件系统来查看当前值:

1cat /proc/sys/vm/vfs_cache_pressure
1[secondary_label Output]
2100

按照目前的配置,我们的系统从缓存中删除 inode 信息的速度太快。我们可以将其设置为更保守的值,比如 50,只需键入

1sudo sysctl vm.vfs_cache_pressure=50
1[secondary_label Output]
2vm.vfs_cache_pressure = 50

同样,这只对当前会话有效。我们可以将其添加到配置文件中进行更改,就像交换性设置一样:

1sudo nano /etc/sysctl.conf

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

1[label /etc/sysctl.conf]
2vm.vfs_cache_pressure=50

完成后保存并关闭文件。

结论

按照本指南中的步骤操作,可以在出现内存不足异常时给你一些喘息的机会。交换空间在避免某些常见问题方面非常有用。

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

Published At
Categories with 技术
comments powered by Disqus