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
交换到交换空间的频率。这是一个介于0
到100
之间的值,表示百分比。当数值接近零时,内核将非必要不会交换数据到磁盘。请注意,读写交换文件相较于与RAM
直接交互花费的时间长得多,可能导致性能显著下降。告诉系统不要过多依赖交换通常会使系统的运行速度更快。
可以通过输入以下命令查看当前的swappiness
值:
cat /proc/sys/vm/swappiness
对于服务器,需要将其值更接近0
,可以使用sysctl
命令将swappiness
设置为不同的值:
sysctl vm.swappiness=10
如需要持久化配置,则需编辑/etc/sysctl.conf
文件,修改其中的vm.swappiness
属性值,如没有则在文件底部插入:
vm.swappiness=10