# Linux 添加虚拟内存 swap

# 查看磁盘使用情况

free -h

# 添加 Swap 分区

使用 dd 命令创建名为 swapfile 的 swap 交换文件(文件名和目录任意):

注意:一般设置为物理内存的两倍,比如内存是 4G,那么虚拟内存 swap 就设置为 8G。

dd if=/dev/zero of=/var/swapfile bs=1024 count=8388608

/dev/zero 是 Linux 的一种特殊字符设备(输入设备),可以用来创建一个指定长度用于初始化的空文件,如临时交换文件,该设备无穷尽地提供 0,可以提供任何你需要的数目。

bs=1024:单位数据块(block)同时读入/输出的块字节大小为 1024 个字节(Byte),即 1KB。bs(即 block size)。一般不需要修改。

count=8388608:表示 8G(计算公式为:1KB * 8388608 = 1KB * 1024(k) * 1024 * 8 = 8388608 = 8G,如果需要调整交换区的大小的话,可以自行计算设置其他的值

执行完命令后,会进行 8G 读写操作,所以会有一些卡顿,请耐心等待

# 设置 swap 分区权限

chmod -R 0600 /var/swapfile

# 对交换文件格式化并转换为 swap 分区

mkswap /var/swapfile

# 挂载并激活分区

swapon /var/swapfile

# 查看新swap分区是否正常添加并激活使用

free -h

# 修改 fstab 配置,设置开机自动挂载该分区

echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab

# 更改 swap 配置

一般默认的情况,当我们开启交换虚拟内存空间后,默认是当内存使用 30% 的时候,就会开始使用交换空间,这样就会造成一个情况,就是本身物理内存还没有使用完成,却使用了虚拟内存,这样肯定会影响我们的使用效率,那么我们怎么避免这个情况的发生呢?

答案就是:可以通过设置 swappiness 值进行管理,swappiness 表示系统对 swap 分区的依赖程度,范围是 0~100,数值越大,依赖程度越高,也就是越高越会使用 swap 分区。

所以,我们现在并不希望我们的机器过度依赖 swap 分区,只有当我们负载超过某个百分比的时候,才使用交换空间,所以这也决定了,我们这个值并不是非常大,一般设置 10 ~ 50 左右。

当然如果小伙伴的是 SSD 的话,那么这个值可以稍微大一些。

下面我们查看当前的swappiness数值:

cat /proc/sys/vm/swappiness

修改 swappiness 值,这里以 10 为例(默认是 30,即物理内存用到了 70% 就开始使用虚拟内存 swap):

sysctl vm.swappiness=10

设置永久有效,重启系统后生效

echo "vm.swappiness = 10" >> /etc/sysctl.conf

查看是否修改成功

cat /proc/sys/vm/swappiness

参考资料:

CentOS增加虚拟内存 (opens new window)