CentOS7 下建立 SWaP 分区以增加虚拟内存

明明腾讯云才免费帮忙升过配置,1H2G 升到了 2H4G,结果稍微部署了一点 Docker 又不够了……
看了下现在的这些容器基本都是做端口流量转发的任务,内存交换量不需要很大,想试着加下虚拟内存看看能不能解决问题,毕竟 2H8G 的服务器就要到 70 多一个月了,能省则省。


1、因为 SWaP 分区相当于是将硬盘作为内存使用,硬盘 IO 速率如果不行会很影响程序运行,所以请先确定虚拟内存是否能满足你的需要。
因我的需求是新增内存以运行更多的 Docker 容器,起一个样例并循环调用查看它的运行情况。

粗略可以看到大概为 4 kB/s 的内存速率要求……
再野鸡的 VPS 钻石盘都能满足,但还是来看下腾讯云硬盘 IO:

time dd if=/dev/zero of=/test.disk bs=8k count=300

硬盘 IO
肯定能满足要求了。

2、创建 SWaP 分区。
首先查看是否是否已经有 SWaP 分区存在:

# 一般情况下 SWaP 分区操作都在服务器根目录下执行
cd /
free -m

SWaP
如果有的话先删除,执行以下命令清理分区:

# swapfile 为你的分区文件名
swapoff /swapfile

如果没有既存分区或者分区清理完毕以后,便可以开始着手增加分区了。
网上一般都建议增加 1 到 2 倍原内存的虚拟内存空间,实际上还是得看你是否真的需要这些内存和其性能是否能满足你的要求,部分情况下堆积过多缓存在 SWaP 会严重影响程序运行,在最边缘的扇区 IO 速率甚至会降到不到 1mB/s 以下,详细可以参照这篇讨论:How can swapoff be that slow?
回归正题,因为我对内存速率一点要求都没有,因此直接扩容到当前内存的 2 倍大小,

# 创建分区文件,我的分区文件名为 swapfile
sudo dd if=/dev/zero of=/swapfile bs=1k count=7578000
# 建立 SWaP
mkswap /swapfile
# 启动 SWaP
swapon /swapfile
# 查看虚拟内存是否创建成功
free -m

创建成功
创建成功。

3、开机自动启动 SWaP 分区。
只需要修改 /etc/fstab 文件,在最后添加一行内容即可。

sudo chmod 777 /etc/fstab
sed -i '$a /swapfile swap swap defaults 0 0' /etc/fstab

至此,SWaP 分区创建成功,可以重启看下配置是否均生效。