Linux创建和启用Swap交换区
查看了下内存使用情况
total used free shared buff/cache available
Mem: 991 859 68 0 39
Swap: 0 0 0
不是很明白Swap是什么意思,百度了一下才知道Swap交换区
概念粘一下
对于Linux来说,其在服务器市场的使用已经占据了绝对的霸主地位,不可动摇。Linux的各种设计思想和使用也被传承(当然不乏各种黑Linux,而且黑的漂亮)。Linux的很多独特的设计,对性能也产生了巨大的提升,也为其他应用软件和系统提供了参考。这篇文章介绍一下Linux中swap与memory。
对于memory没什么可说的就是机器的物理内存,读写速度低于cpu一个量级,但是高于磁盘不止一个量级。所以,程序和数据如果在内存的话,会有非常快的读写速度。但是,内存的造价是要高于磁盘的,虽然相对来说价格一直在降低。除此之外,内存的断电丢失数据也是一个原因说不能把所有数据和程序都保存在内存中。既然不能全部使用内存,那数据还有程序肯定不可能一直霸占在内存中。当内存没有可用的,就必须要把内存中不经常运行的程序给踢出去。但是踢到哪里去,这时候swap就出现了。swap全称为swap place,,即交换区,当内存不够的时候,被踢出的进程被暂时存储到交换区。当需要这条被踢出的进程的时候,就从交换区重新加载到内存,否则它不会主动交换到真是内存中。
当用户提交程序,然后产生进程,在机器上运行。机器会判断当前物理内存是否还有空闲允许进程调入内存运行,如果有那么则直接调入内存进行运行;如果没有,那么会根据优先级选择一个进程挂起,把该进程交换到swap中等待,然后把新的进程调入到内存中运行。根据这种换入和换出,实现了内存的循环利用,让用户感觉不到内存的。从这也可以看出swap扮演了一个非常重要的角色,就是暂存被换出的进程。 内存与swap之间是按照内存页为单位来交换数据的,一般Linux中页的大小设置为4kb。而内存与磁盘则是按照块来交换数据的。
创建和使用Swap
1.创建swap交换区硬盘存储用的空白文件。
dd if=/dev/zero of=/swap bs=1M count=1024
dd if=/dev/zero of=/swap bs=1M count=4096
2.使用mkswap格式化文件为swap文件系统
mkswap -f /swap
3.启用刚才创建的Swap文件
chmod 600 /swap
swapon /swap
chmod 600 /swap
swapoff /swap
swapon /swap
4.设置开机自动启用swap文件交换区,修改/etc/fstab,增加一行代码
echo '/swap swap swap defaults 0 0 ' >> /etc/fstab
这样的话就启动swap了,但是swap的使用内存 一直是0,原来是自己的swappiness设置问题
查看swappiness值
cat /proc/sys/vm/swappiness
发现设置的是0
swappiness的值的大小对如何使用swap分区是有着很大的联系的。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。如果设置成60,你的内存在使用到100-60=40%的时候,就开始出现有交换分区的使用。OK明白了 修改swappiness
临时调整的方法如下,我们调成50:
[root@iZ2zedk6fi761b19pn9qdeZ ~]# sysctl vm.swappiness=50
vm.swappiness = 50
[root@iZ2zedk6fi761b19pn9qdeZ ~]# cat /proc/sys/vm/swappiness
50
这只是临时调整的方法,重启后会回到默认设置的
要想永久调整的话,需要将
需要在/etc/sysctl.conf修改,加上:
vm.swappiness=50
激活设置
[root@timeserver ~]# sysctl -p
[root@iZ2zedk6fi761b19pn9qdeZ dev]# free -m
total used free shared buff/cache available
Mem: 991 587 273 0 130 278
Swap: 1023 265 758