linux上有一个swap分区,直白的说,其作用就是在物理硬盘上划出一块大小当内存来用。这和windows上的虚拟内存应该是同一个道理 。但有时你会发现,SWAP分区明明已经被用了很大一部分,磁盘IO并不高。为什么?因为SWAP分区是用来进行进程调度–进程是正在运行的程序–把当前不用的进程调成‘等待(standby)‘,甚至‘睡眠(sleep)’,一旦要用,再调成‘活动(active)’,睡眠的进程就躺到SWAP分区睡大觉,把内存空出来让给‘活动’的进程。

但当我们有足够大的内存时,其实没必要冒IO有可能会上去的险(当进程调度频繁,硬盘的IO就活跃了) 。这时候可能通过一个参数swappiness修改来改变使用的优先级。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。其默认值是60 。而要查看当前系统设置的值可以通过如下方法:

1[root@localhost ~]# sysctl -a|grep vm.swapp
2vm.swappiness = 60

当前生效可以通过调整proc参数实现:

1echo 10 > /proc/sys/vm/swappiness

永久生效可以利用如下方法:

1echo “vm.swappiness=10″ >> /etc/sysctl.conf
2sysctl -p

注:按以两种方法任一种操作后,通过free -m查看时,会发现目前的内存使用情况并不会有多大的改变(除非你有新的程序启用)。原因很简单,当前的设置并未对已经运行的进程有效。这就需要我们重启主机或者重启最大占用内存的进程,使其使用当前的配置。

另外普及一下mem与swap方面的知识。根据一般的使用情况,两者的比例关系如下:

1RAM Size    Swap Size
21-2G         1.5 倍 RAM
32-8G         1 倍 RAM
4>8G          0.75 RAM

当的Memory >32G 时,一般都会将Swap 空间设置在10g 以内,甚至更小。