1. 什么是 Swap

Swap 是硬盘存储的一部分,专门为操作系统预留,用于临时存储无法再保存在 RAM 中的数据。当 RAM 中不再有足够的空间来保存正在使用的应用程序数据时,将使用硬盘上的交换(Swap)空间。
但使用交换空间有一些代价,将信息写入磁盘将比将信息保存在 RAM 中慢得多,因此操作系统更倾向于将正在运行的应用程序数据保留在内存中,并使用交换空间来处理较旧的数据。
总的来说,在系统 RAM 耗尽时,拥有交换空间作为后备可以有效防止内存不足异常。

2. 检查当前是否有交换空间

通过以下命令检查当前环境是否配置了交换空间:

swapon --show

如果没有返回任何输出,这意味着系统当前没有可用的交换空间。也可以使用free程序验证没有活动的交换空间:

free -h

如果返回的Swap总大小为0B,则没有可用的交换空间,反之则会显示交换空间的大小。

3. 创建交换文件

创建交换文件的最佳方法是使用fallocate程序,此命令可快速的创建指定大小的文件。文件的大小建议与当前环境的物理内存相同,此处以在根目录创建1G大小的交换文件为例:

fallocate -l 1G /swapfile

创建完成后,可以执行以下命令验证是否正确创建了足够空间的文件

ls -lh /swapfile

4. 启用交换文件

将文件修改为只有root用户可访问:

chmod 600 /swapfile

通过输入以下命令将文件标记为交换空间:

mkswap /swapfile

启用交换文件:

swapon /swapfile

输入以下命令验证交换空间是否可用(也可以使用free命令):

swapon --show

5. 持久化交换空间配置

备份/etc/fstab文件以防出现问题

cp /etc/fstab /etc/fstab.bak

将交换文件信息添加到/etc/fstab文件末尾:

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

6. 修改系统交换属性

swappiness参数配置系统将数据从RAM交换到交换空间的频率。这是一个介于0100之间的值,表示百分比。当数值接近零时,内核将非必要不会交换数据到磁盘。请注意,读写交换文件相较于与RAM直接交互花费的时间长得多,可能导致性能显著下降。告诉系统不要过多依赖交换通常会使系统的运行速度更快。
可以通过输入以下命令查看当前的swappiness值:

cat /proc/sys/vm/swappiness

对于服务器,需要将其值更接近0,可以使用sysctl命令将swappiness设置为不同的值:

sysctl vm.swappiness=10

如需要持久化配置,则需编辑/etc/sysctl.conf文件,修改其中的vm.swappiness属性值,如没有则在文件底部插入:

vm.swappiness=10
Last modification:January 10, 2025
如果觉得我的文章对你有用,请随意赞赏