文章

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 了。

swappiness 的作用是什么?它如何影响 swap_tendency?

Linux虚拟内存参数

本文由作者按照 CC BY 4.0 进行授权

© TheDarkStarJack. 保留部分权利。

[本站总访问量次] [本站访客数人次] [本文总阅读量次]

本站采用 Jekyll 主题 Chirpy