一、背景
当在编译大型工程或者运行大型应用时,如果内存大小不足,就会失败,此时可以通过设置swap空间来缓解一下问题,一定程度上解决问题
二、swappiness
swappiness是Linux内核的一个属性,其值代表了将运行内存数据交换到交换空间的策略,其值的范围为[0,100]
# cat /proc/sys/vm/swappiness
60
|---------|------------------------------------|
| val | desc |
| 60 | 表示内存使用率超过1-60%=40%时,开始使用交换分区 |
| 0 | 表示最大程度使用物理内存 |
| 100 | 表示最大程度使用swap分区,并及时将内存上的数据搬移到swap空间 |
#临时调整
sudo sysctl vm.swappiness = 10
#永久调整
sudo vim /etc/sysctl.conf
# 在末尾加上
# vm.swappiness=10
三、设置交换空间
1、移动交换分区内容
将现有swap移动到主内存,可能需要几分钟
sudo swapoff -a
执行前后可以用free命令查看到变化
# free -m
total used free shared buff/cache available
Mem: 31888 1132 29372 256 1383 30096
Swap: 2047 0 2047
# sudo swapoff -a
# free -m
total used free shared buff/cache available
Mem: 31888 1209 29259 263 1419 30012
Swap: 0 0 0
2、创建交换目录
# sudo mkdir /swap_local
# cd /swap_local
3、添加交换文件
例如设置6G交换空间,注意bs段应小于物理内存大小,否则可能会报错
# sudo dd if=/dev/zero of=swapfile bs=1G count=6
# sudo chmod 0600 ~/swap_local/swapfile
4、激活交换空间
# sudo mkswap swapfile
Setting up swapspace version 1, size = 6 GiB (6442446848 bytes)
no label, UUID=95ad1967-7df3-4c88-b2fd-b61db692b726
# sudo swapon ~/swap_local/swapfile
# free -m
total used free shared buff/cache available
Mem: 31888 1211 22929 270 7747 29953
Swap: 6143 0 6143
5、设置永久生效
# sudo gedit /etc/fstab
# ~/swap_local/swapfile swap swap sw 0 0
【参考博客】
[1] Linux 扩大swap的方法和配置使用交换分区的策略 - 新动弹计划