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 分区重启后都会生效了。