swap分区
一般memory是机器的物理内存,读写速度低于cpu一个量级,可是高于磁盘不止一个量级。因此,程序和数据若是在内存的话,会有很是快的读写速度。可是,内存的造价是要高于磁盘的,虽然相对来讲价格一直在下降。除此以外,内存的断电丢失数据也是一个缘由说不能把全部数据和程序都保存在内存中。既然不能所有使用内存,那数据还有程序确定不可能一直霸占在内存中。当内存没有可用的,就必需要把内存中不常常运行的程序给踢出去。可是踢到哪里去,这时候swap就出现了。
swap全称为swap place,即交换区
,当内存不够的时候,被踢出的进程被暂时存储到交换区。当须要这条被踢出的进程的时候,就从交换区从新加载到内存,不然它不会主动交换到真实内存中。
计算机对内存分为物理内存与虚拟内存(注意虚拟内存和虚拟地址空间的区别)。物理内存就是计算机的实际内存大小,由RAM芯片组成的。虚拟内存则是虚拟出来的、使用磁盘代替内存。虚拟内存的出现,让机器内存不够的状况获得部分解决。当程序运行起来由操做系统作具体虚拟内存到物理内存的替换和加载(相应的页与段的虚拟内存管理)。
这里的虚拟内存即所谓的swap
。
当用户提交程序,而后产生进程,在机器上运行。机器会判断当前物理内存是否还有空闲容许进程调入内存运行,若是有那么则直接调入内存进行运行;若是没有,那么会根据优先级选择一个进程挂起,把该进程交换到swap中等待,而后把新的进程调入到内存中运行。根据这种换入和换出,实现了内存的循环利用,让用户感受不到内存的限制
。从这也能够看出swap扮演了一个很是重要的角色,就是暂存被换出的进程。内存与swap之间是按照内存页为单位来交换数据的,通常Linux中页的大小设置为4kb。而内存与磁盘则是按照块来交换数据的。
调整swappiness参数
swappiness的值的大小对如何使用swap分区是有着很大的联系的。swappiness=0的时候表示最大限度使用物理内存,而后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,而且把内存上的数据及时的搬运到swap空间里面。linux的基本默认设置为60,具体以下:
通常默认值都是60
[root@timeserver ~]# cat /proc/sys/vm/swappiness
60
也就是说,你的内存在使用到
100-60=40%
的时候,就开始出现有交换分区的使用。这样子会加大系统io,同时造的成大量页的换进换出,严重影响系统的性能,因此咱们在操做系统层面,要尽量使用内存。
经过sysctl -q vm.swappiness能够查看参数的当前设置:
[root@admin ~]$ sysctl -q vm.swappiness
vm.swappiness = 30
临时调整的方法以下,咱们调成10:
[root@timeserver ~]#
sysctl vm.swappiness=10
vm.swappiness = 10
[root@timeserver ~]# cat /proc/sys/vm/swappiness
10
这只是临时调整的方法,重启后会回到默认设置的
要想永久调整的话,须要将
须要在/etc/sysctl.conf修改
,加上:
[root@timeserver ~]#
cat /etc/sysctl.conf
# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 4294967296
vm.swappiness=10
激活设置
[root@timeserver ~]#
sysctl -p
在linux中,能够经过修改swappiness内核参数,下降系统对swap的使用,从而提升系统的性能。