Linux内核参数vm.swappiness
内核参数 vm.swappiness 控制系统运行时使用交换内存的相对权重,参数值大小对如何使用swap分区有很大联系。值越大,表示越积极使用swap分区,越小表示越积极使用物理内存。默认值 swappiness=60,表示内存使用率超过 40% 时开始使用交换分区。swappiness=0 的时候表示最大限度使用物理内存,无法分配物理内存的时候才考虑使用 swap 空间;swappiness=100 的时候表示积极使用swap分区,并把内存上的数据及时搬运到swap空间。
需要根据服务器运行的程序类型,来设置不同的参数值。例如,对于Oracle一般设置为10;对于MySQL一般设置为1,尽可能不用swap分区。 现在内存不像以前那样匮乏,很多时候都关闭了 swap ,不过对于一些比较重要的系统还是建议设置一定大小的 swap ,以防止重要的程序因为某一个突发峰值的时候出现 oom,导致业务中断。
查看swappiness 参数值
1
cat /proc/sys/vm/swappiness
临时调整
1
2
sysctl vm.swappiness = 10
cat /proc/sys/vm/swappiness
永久调整
1
2
vi /etc/sysctl.conf
vm.swappiness=10
加载参数 : sysctl -p
释放 swap
sync 数据
1
#sync
sync 命令用于强制被改变的内容立刻写入磁盘,更新块信息,以防止释放,可用来强制将内存缓冲区中的数据立即写入磁盘中。
清理 swap
1
echo 3 > /proc/sys/vm/drop_caches
- echo 1:释放页面缓存
- echo 2:释放目录文件和inodes
- echo 3:释放所有缓存(页面缓存,目录文件和inodes)
关闭/开启 swap
1
2
swapoff -a
swapon -a
总结
长时间存在的swap虽然大多数情况下无害,不过偶发性还是有可能会引发性能毛刺的。比如说某些内存是某个系统调度的进程使用的 ,十天半个月突然活跃了一下,而这个系统进程在工作时会引发一些全局锁,而正好抽风在一个交易系统的关键时刻启动了,那时候就会产生一个系统运行毛刺。因此对于某些系统,可以定期清理 swap 。 想要清理掉swap,在确保物理内存足够用,并且系统没有关键业务在执行的时候,只需要 swapoff -a
就可以关闭 swap 了,此时所有的 swap 都会转储到内存。然后再 swapon -a
就可以重新开启 swap 了。
本文由作者按照
CC BY 4.0
进行授权