安装过linux系统的同学都知道,linux有个叫swap的分区。可并不是每一个人都知道这是干嘛用的。swap分区,顾名思义,就是交换分区的意思。那交换什么?什么时候发生交换呢?
swap分区其实跟window系统的pagefile.sys功能类似(在C盘根目录下),通常pagefile.sys是隐藏的系统文件,如想查看,可以打开“文件夹选项”,来到查看tab,如下图选上红色框框的即可。
言归正传,swap交换分区存储的是进程的数据。通常,进程的数据是加载在物理内存的。之所以进程的数据会被换入(swap in,si)和换出(swap out,so)交换分区,很大一部分是因为当前系统性能可能存在瓶颈,通常表现为物理内存吃紧。当系统的物理内存不够用的时候,内核调度算法会将物理内存中的一部分空间释放出来,以供其他需要内存空间的进程使用。那些被释放的空间来自那些很长时间都没有什么操作的进程,这些被释放的空间被临时换入(swap
in)到swap空间中,等到那些进程需要使用时,再从swap分区将数据换出(swap
out)到内存中。但这并不是说,系统总是在物理内存不够用时,才会进行进程数据swap的。
进程数据与swap分区发生数据交换的时间,主要由内核的调度算法决定,其过程比较复杂。至少,需要参考内核参数swappiness。swappiness的值是告诉内核,使用swap的概率(或频率),其值取[0,100],值越高表示使用swap的可能性越大,100表示尽可能使用swap,0表示不使用swap。通常swappiness的值默认为60。
查看或修改swappiness的方法:
1)查看
cat /proc/sys/vm/swappiness
或sysctl -a|grep swappiness
2)修改,swappiness的值可根据系统当前的性能状况适当设置
sysctl
vm.swappiness=0或echo 0>/proc/sys/vm/swappiness注意:这种方式系统重启后失效
或
echo "vm.swappiness= 0">>/etc/sysctl.conf 写入到内核参数配置文件中,即使重启也不会失效
sysctl
-p 重新读取内核参数配置文件/etc/sysctl.conf,使最新的配置内核参数生效
另:如系统的物理内存足够用,为提高IO的响应速度,可把swap分区禁用。
swapoff -a
然后修改/etc/fstab,将swap分区的信息注释掉。