swap、swappiness 和kswapd0

    linux系统每过一定时间就会唤醒kswapd进程,看看内存是否紧张,如果不紧张,则睡眠,在kswapd中,有2个阀值,pages_hige和pages_low,当空闲内存页的数量低于pages_low的时候,kswapd进程就会扫描内存并且每次释放出32个free pages,直到free page的数量到达pages_high.

    linux在负载比较大(内存很紧张)的时候一般会看到这样的两个进程kswapd0和kswapd1,如果这个进程占用系统资源很多,尤其是在rac环境会引起系统的宕机,如果这个进程占用资源非常高,那就要考虑优化系统,或添加硬件资源。


    Linux 会使用硬盘的一部分做为 Swap 分区,用来进行进程调度–进程是正在运行的程序–把当前不用的进程调成‘等待(standby)’,甚至‘睡眠(sleep)’,一旦要用,再调成‘活动(active)’,睡眠的进程就会在 Swap 分区,把内存空出来让给‘活动’的进程。

    如果内存够大,应当告诉 Linux 不必太多的使用 Swap 分区,可以通过修改 swappiness 的参数来设置。swappiness=0 的时候表示最大限度使用物理内存,然后才是 Swap 空间,swappiness=100 的时候表示积极的使用 Swap 分区,并且把内存上的数据及时的搬运到 Swap 空间里面。
在 CentOS 中,swappiness 的默认值是60。
通过以下命令可以看到:

#cat /proc/sys/vm/swappiness
 60

    我们可以调整 swappiness 的值到一个合适的参数,从而达到最优化使用 Swap 的目的。这里我们将其设为10。
使用 sysctl 命令:

#sysctl vm.swappiness=10
或者
#echo 0 > /proc/sys/vm/swappiness

  但是这只是临时性的修改,在你重启系统后会恢复默认的60,要永久设置,还需要在 vim 中修改sysctl.conf:

#vi /etc/sysctl.conf
在这个文档的最后加上这样一行:
    # Search for the vm.swappiness setting.  Uncomment and change it as necessary.
    vm.swappiness=10

这样一来,Swap 分区重启后都会生效了。


本文出自 “Go right on” 博客,请务必保留此出处http://caduke.blog.51cto.com/3365689/1600335

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。