Linux创建和启用Swap交换区

来源:互联网 发布:java字符串替换失败 编辑:程序博客网 时间:2024/06/05 18:56

Linux创建和启用Swap交换区

最近测试服务器老是出现卡死情况,因为用的阿里云服务器自己还不能重启;每次都需要惊动技术总监来重启服务器,一直觉得是测试服务器内存问题,原来是自己太菜…

查看了下内存使用情况

          total        used        free      shared  buff/cache   availableMem:      991          859          68           0          64          39Swap:      0            0            0

不是很明白Swap是什么意思,百度了一下才知道Swap交换区

概念粘一下
对于Linux来说,其在服务器市场的使用已经占据了绝对的霸主地位,不可动摇。Linux的各种设计思想和使用也被传承(当然不乏各种黑Linux,而且黑的漂亮)。Linux的很多独特的设计,对性能也产生了巨大的提升,也为其他应用软件和系统提供了参考。这篇文章介绍一下Linux中swap与memory。

对于memory没什么可说的就是机器的物理内存,读写速度低于cpu一个量级,但是高于磁盘不止一个量级。所以,程序和数据如果在内存的话,会有非常快的读写速度。但是,内存的造价是要高于磁盘的,虽然相对来说价格一直在降低。除此之外,内存的断电丢失数据也是一个原因说不能把所有数据和程序都保存在内存中。既然不能全部使用内存,那数据还有程序肯定不可能一直霸占在内存中。当内存没有可用的,就必须要把内存中不经常运行的程序给踢出去。但是踢到哪里去,这时候swap就出现了。swap全称为swap place,,即交换区,当内存不够的时候,被踢出的进程被暂时存储到交换区。当需要这条被踢出的进程的时候,就从交换区重新加载到内存,否则它不会主动交换到真是内存中。

在详细介绍swap之前,我们需要知道的是计算机对内存分为物理内存与虚拟内存(注意虚拟内存和虚拟地址空间的区别)。物理内存就是计算机的实际内存大小,由RAM芯片组成的。虚拟内存则是虚拟出来的、使用磁盘代替内存。虚拟内存的出现,让机器内存不够的情况得到部分解决。当程序运行起来由操作系统做具体虚拟内存到物理内存的替换和加载(相应的页与段的虚拟内存管理)。这里的虚拟内存即所谓的swap。

当用户提交程序,然后产生进程,在机器上运行。机器会判断当前物理内存是否还有空闲允许进程调入内存运行,如果有那么则直接调入内存进行运行;如果没有,那么会根据优先级选择一个进程挂起,把该进程交换到swap中等待,然后把新的进程调入到内存中运行。根据这种换入和换出,实现了内存的循环利用,让用户感觉不到内存的限制。从这也可以看出swap扮演了一个非常重要的角色,就是暂存被换出的进程。 内存与swap之间是按照内存页为单位来交换数据的,一般Linux中页的大小设置为4kb。而内存与磁盘则是按照块来交换数据的。

创建和使用Swap
1.创建swap交换区硬盘存储用的空白文件。

dd if=/dev/zero of=/swap bs=1M count=1024

2.使用mkswap格式化文件为swap文件系统

mkswap -f /swap

3.启用刚才创建的Swap文件

swapon /swap

4.设置开机自动启用swap文件交换区,修改/etc/fstab,增加一行代码

/swap swap swap defaults 0 0 

这样的话就启动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=50vm.swappiness = 50[root@iZ2zedk6fi761b19pn9qdeZ ~]# cat /proc/sys/vm/swappiness50

这只是临时调整的方法,重启后会回到默认设置的

要想永久调整的话,需要将
需要在/etc/sysctl.conf修改,加上:

vm.swappiness=50

激活设置
[root@timeserver ~]# sysctl -p

设置完毕重启了下tomcat 发现正常运行了

[root@iZ2zedk6fi761b19pn9qdeZ dev]# free -m              total        used        free      shared  buff/cache   availableMem:            991         587         273           0         130         278Swap:          1023         265         758

此博客参考了其他博客,仅做记录用;

学无止境啊,下班~2017年6月7日21:44:13

原创粉丝点击