目录
一、什么是swap?
二、为什么需要swap?
三、swap的缺点?
四、Swap分区的作用
1、扩展内存
2、防止意外崩溃
3、将经常不使用的内存数据转移至Swap分区中
五、到底要不要swap?
1、内存勉强够用
2、内存充裕
3、服务器环境
六、怎么配置swap?
七、查看系统中已经配置的swap
八、查看系统中swap in/out的情况
九、如何优化swap性能?
每次安装Linux的时候,都会要求配置交换分区,那么这个分区是干嘛的呢?不设置这个分区有什么后果?如果一定要设置,设置多大比较合适?
swap space是磁盘上的一块区域,可以是一个分区,也可以是一个文件,或者是他们的组合。简单点说,当系统物理内存吃紧时,Linux会将内存中不常访问的数据保存到swap上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问swap上存储的内容时,再将swap上的数据加载到内存中,这就是我们常说的swap out和swap in。
Swap分区的大小是与内存大小相关的,通常建议Swap分区的大小为内存的2倍,但也不是绝对的。Swap分区还可以使用交换文件来代替,在需要增加Swap分区时非常方便。
要回答这个问题,就需要回答swap给我们带来了哪些好处。
上面介绍了swap的优点,那swap的缺点呢?swap是存放在磁盘上的,磁盘的速度和内存比较起来慢了好几个数量级,如果不停的读写swap,那么对系统的性能肯定有影响,尤其是当系统内存很吃紧的时候,读写swap空间发生的频率会很高,导致系统运行很慢,像死了一样,这个时候添加物理内存是唯一的解决办法。
由于系统会自动将不常用的内存数据移到swap上,对桌面程序来说,有可能会导致最小化一个程序后,再打开时小卡一下,因为需要将swap上的数据重新加载到内存中来。
当内存使用量过大时,Swap分区将会暂时代替内存,从而减轻内存的使用压力。在大部分情况下,Swap分区的作用并不明显。但是在一些需要大量内存的任务或者虚拟机使用时,Swap分区扩展内存是解决问题的重要手段。
当内存不足时,操作系统往往会强制终止一些程序,以保证操作系统的运行。然而,当正在运行的程序需要持久性存储数据时,会造成数据丢失等问题。使用Swap分区的方式可以很好的解决该问题。当内存不足时,操作系统会将数据写入Swap分区中,并在内存足够时再读取数据。
Swap分区不仅可以用来扩充内存,同时也可以用来辅助操作系统更高效地运行。例如,一些经常不使用的内存数据可以转移到Swap分区中,以释放内存空间,使操作系统运行更加稳定。
建议配置swap,这样内核会将不常用的数据从内存移到swap上,从而有更多的物理内存供系统调用,提升系统性能,同时也避免因偶尔的物理内存不够造成进程异常退出,提升系统稳定性,但对服务器来说,一定要限制或者监控swap空间的使用情况,当出现swap空间使用超预期或者swap in/out频繁时,要及时采取措施,不然对性能影响很大
理论上来说,如果物理内存足够多并且不需要休眠功能,那swap就没什么用,可关键问题是我们很难保证物理内存在任何情况下都够用,因为总有意想不到的情况发生,比如某些进程耗内存超预期,服务器压力超预期,内存泄漏等。
服务器一般都会配置监控程序,当内存用量达到一个阈值的时候告警或者会自动重启异常的进程。但如果没有监控呢?当内存被用光的时候,分两种情况:
从上面可以看出,对服务器来说,似乎不配置swap更好,可以让有问题的进程尽快重启,缩短业务受影响的时间。
并且,就算没有配置监控程序,我们还有cgroups中的内存控制模块,可以控制一组进程所能使用的最大内存数,当超过这个数的时候,可以触发相应的行为,比如重启进程等。
总的来说,对于桌面环境来说,一般内存没有服务器端那么充裕,并且由于使用场景原因,会打开很多不同类型的GUI窗口,但前台的进程只有一个,大部分都是在后台待命,所以配置swap对提升性能还是有必要的;对于服务器来说,配置的内存都比较充裕,启动起来的进程也都是要干活的进程(不然就不应该被启动起来),并且也没有休眠的需求,再加上有了cgroups之后,可以更轻松的限制进程的内存使用,个人认为配置swap基本没什么必要了,看看coreos,默认就没有swap。
当我们确定好配置多大的swap空间后,具体应该怎么配置呢?当然可以在系统安装的时候分配好,但如果对安装时分配的大小不满意,我们还可以在后面进行调整。在这里将不介绍安装的时候怎么配,只介绍如何往系统中添加更多的swap空间。
Linux下有两种类型的swap空间,swap分区和swap文件,他们有各自的特点:
使用命令swapon -s即可查看系统中在用的swap
如果配置有多个swap分区或者文件的话,这里将会有多行,每行代表一个正在被系统使用的swap分区或文件,下面是每个字段的意思:
并不是swap空间占用多就一定性能下降,真正影响性能是swap in和out的频率,频率越高,对系统的性能影响越大,我们可以通过vmstat命令来查看swap in/out的频率
[root@hdp101 ~]# vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 298276 25788 21850032 0 0 9 9 5 5 0 0 100 0 0
0 0 0 298376 25796 21850032 0 0 0 14 67 55 0 0 100 0 0
0 0 0 298376 25796 21850032 0 0 0 0 47 51 0 0 100 0 0
0 0 0 298376 25796 21850032 0 0 0 0 39 37 0 0 100 0 0
0 0 0 298376 25796 21850032 0 0 0 0 51 56 0 0 100 0 0
0 0 0 298376 25796 21850032 0 0 0 0 44 42 0 0 100 0 0
0 0 0 298376 25796 21850032 0 0 0 0 36 43 0 0 100 0 0
0 0 0 298376 25796 21850032 0 0 0 0 38 37 0 0 100 0 0
0 0 0 298376 25796 21850032 0 0 0 0 79 72 0 0 100 0 0
0 0 0 298344 25796 21850032 0 0 0 0 51 47 0 0 100 0 0
0 0 0 298376 25796 21850032 0 0 0 0 36 43 0 0 100 0 0
0 0 0 298468 25796 21850032 0 0 0 0 50 47 0 0 100 0 0
0 0 0 298476 25796 21850032 0 0 0 0 38 44 0 0 100 0 0
0 0 0 298508 25796 21850032 0 0 0 0 33 35 0 0 100 0 0
怎么配置swap可以让它的性能更好呢?