Linux swap分区的示例分析

发布时间:2022-01-21 10:45:41 作者:柒染
来源:亿速云 阅读:78

Linux swap分区的示例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

什么是swap?

swap space是磁盘上的一块区域,可以是一个分区,也可以是一个文件,或者是他们的组合。简单点说,当系统物理内存吃紧时,Linux会将内存中不常访问的数据保存到swap上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问swap上存储的内容时,再将swap上的数据加载到内存中,这就是我们常说的swap out和swap in。

为什么需要swap?

要回答这个问题,就需要回答swap给我们带来了哪些好处。

swap的缺点?

上面介绍了swap的优点,那swap的缺点呢?swap是存放在磁盘上的,磁盘的速度和内存比较起来慢了好几个数量级,如果不停的读写swap,那么对系统的性能肯定有影响,尤其是当系统内存很吃紧的时候,读写swap空间发生的频率会很高,导致系统运行很慢,像死了一样,这个时候添加物理内存是唯一的解决办法。

由于系统会自动将不常用的内存数据移到swap上,对桌面程序来说,有可能会导致最小化一个程序后,再打开时小卡一下,因为需要将swap上的数据重新加载到内存中来。

到底要不要swap?

上面介绍了什么是swap以及它们的优缺点,那么到底要不要配置swap呢?答案是:看情况。

下面分别讨论内存不够用、内存勉强够用和内存很充裕这三种情况下服务器和桌面环境对swap的选择。

内存不够用

不管是桌面还是服务器,当物理内存明显不够用,而又想跑程序的话,添加swap是唯一的选择,慢点总比不能工作强。

内存勉强够用

建议配置swap,这样内核会将不常用的数据从内存移到swap上,从而有更多的物理内存供系统调用,提升系统性能,同时也避免因偶尔的物理内存不够造成进程异常退出,提升系统稳定性,但对服务器来说,一定要限制或者监控swap空间的使用情况,当出现swap空间使用超预期或者swap in/out频繁时,要及时采取措施,不然对性能影响很大

内存充裕

理论上来说,如果物理内存足够多并且不需要休眠功能,那swap就没什么用,可关键问题是我们很难保证物理内存在任何情况下都够用,因为总有意想不到的情况发生,比如某些进程耗内存超预期,服务器压力超预期,内存泄漏等。

在内存充裕的这种情况下,如果发生异常,swap能帮到我们吗?

桌面环境

一般不会开什么监控功能,所以也没法提前预知内存使用异常,当内存被用光的时候,分两种情况:

服务器环境

服务器一般都会配置监控程序,当内存用量达到一个阈值的时候告警或者会自动重启异常的进程。但如果没有监控呢?当内存被用光的时候,分两种情况:

从上面可以看出,对服务器来说,似乎不配置swap更好,可以让有问题的进程尽快重启,缩短业务受影响的时间

并且,就算没有配置监控程序,我们还有cgroups中的内存控制模块,可以控制一组进程所能使用的最大内存数,当超过这个数的时候,可以触发相应的行为,比如重启进程等。

总的来说,对于桌面环境来说,一般内存没有服务器端那么充裕,并且由于使用场景原因,会打开很多不同类型的GUI窗口,但前台的进程只有一个,大部分都是在后台待命,所以配置swap对提升性能还是有必要的;对于服务器来说,配置的内存都比较充裕,启动起来的进程也都是要干活的进程(不然就不应该被启动起来),并且也没有休眠的需求,再加上有了cgroups之后,可以更轻松的限制进程的内存使用,个人认为配置swap基本没什么必要了,看看coreos,默认就没有swap。

swap大小配置多少比较合适?

既然配置swap对桌面系统有帮助,那么配置多少大小的swap比较合适呢?下面是ubuntu给出的建议:

下面是详细的不同物理内存情况下的建议,第一列是物理内存的大小,第二列和第三列是不需要和需要休眠两种情况下推荐的大小,第四列是不要超过的最大值

 物理内存(MB)  不需要休眠  需要休眠  最大值 256          256       512     512 512          512       1024    1024 1024         1024      2048    2048 物理内存(GB)  不需要休眠  需要休眠  最大值  1          1         2        2  2          1         3        4  3          2         5        6  4          2         6        8  5          2         7        10  6          2         8        12  8          3         11       16  12         3         15       24  16         4         20       32  24         5         29       48  32         6         38       64  64         8         72       128  128        11       139       256

怎么配置swap?

当我们确定好配置多大的swap空间后,具体应该怎么配置呢?当然可以在系统安装的时候分配好,但如果对安装时分配的大小不满意,我们还可以在后面进行调整。在这里将不介绍安装的时候怎么配,只介绍如何往系统中添加更多的swap空间。

Linux下有两种类型的swap空间,swap分区和swap文件,他们有各自的特点:

查看系统中已经配置的swap

dxt@DXT:~/QiuZhao/SharedMem/ShareMem$ free -m              total        used        free      shared  buff/cache   availableMem:           3845        2986         120         411         737         143Swap:          3904        1540        2364

或者:

使用命令swapon -s即可查看系统中在用的swap

dev@dev:~$ swapon -sFilename                Type        Size    Used    Priority/dev/dm-1               partition   524284  0       -1

如果配置有多个swap分区或者文件的话,这里将会有多行,每行代表一个正在被系统使用的swap分区或文件,下面是每个字段的意思:

查看系统中swap in/out的情况

并不是swap空间占用多就一定性能下降,真正影响性能是swap in和out的频率,频率越高,对系统的性能影响越大,我们可以通过vmstat命令来查看swap in/out的频率

#参数2表示每两秒统计一次,si和so两列就是每秒swap in和out的次数dev@ubuntu:~$ vmstat 2procs------------memory--------------swap----io-----system-----------cpu----- r b    swpd  free  buff cache      si so   bi bo   in  cs      us sy id wa st 0 0    70232 75620 7940 209476     0  0    0  0    111 180     0  1  99 0  0 0 0    70232 75620 7940 209476     0  0    0  0    116 186     1  1  99 0  0 0 0    70228 75620 7940 209476     2  0    2  0    120 193     1  1  98 1  0 0 0    70228 75620 7940 209476     0  0    0  0    117 186     0  0  100 0 0 0 0    70228 75620 7940 209476     0  0    0  0    113 184     0  1  99 0  0

添加swap分区

在添加swap分区前,首先得有一个空闲的分区,如果是一块新的磁盘,可以用fdisk来创建一个新的分区用于swap。

注意:磁盘分区操作一定要小心,弄不好就会造成数据丢失、系统挂掉的后果。磁盘分区操作不是本篇要介绍的内容,所以这里不会讨论fdisk怎么用。

#本篇使用的测试环境是虚拟机,/dev/sdb是一块新加的硬盘并且已经用fdisk创建好了一个分区#本例中将使用/dev/sdb1这个分区dev@dev:~$ sudo fdisk -l /dev/sdbDevice     Boot Start     End Sectors Size Id Type/dev/sdb1        2048 4194303 4192256   2G 83 Linux #创建swap分区dev@dev:~$ sudo mkswap /dev/sdb1Setting up swapspace version 1, size = 2 GiB (2146430976 bytes)no label, UUID=d69621de-618a-4bea-9a96-b8e8b0d0ea40 #查看系统中现在正在使用的swap,以便于和添加后做比较dev@dev:~$ swapon -sFilename                Type        Size    Used    Priority/dev/dm-1                               partition   524284  0   -1 #将新的分区加入到系统中dev@dev:~$ sudo swapon /dev/sdb1 #这时候可以看到新的swap分区已经被加入到系统中了,并且优先级比原来的要低dev@dev:~$ swapon -sFilename                Type        Size    Used    Priority/dev/dm-1               partition   524284  0       -1/dev/sdb1               partition   2096124 0       -2 #为了保证系统重启后会自动加载我们新的swap分区,需要修改/etc/fstab文件dev@dev:~$ sudo sh -c 'echo "/dev/sdb1 none  swap    sw   0    0" >> /etc/fstab'#查看一下,确保写入成功,这里的第一条是原来的系统的swap分区,第二条是我们刚添加的dev@dev:~$ grep swap /etc/fstab/dev/mapper/dev--vg-swap_1 none            swap    sw              0       0/dev/sdb1 none  swap    sw   0    0

添加swap文件

添加swap文件就简单多了,也没有分区操作那么有风险。

#先创建一个新的512M的文件,用来作为swap文件,文件路径可以随便#fallocate这个命令依赖于文件系统,有些老的文件系统不支持这个命令,比如ext2,#这种情况下可以用dd来实现同样的效果:#sudo dd if=/dev/zero of=/mnt/512MiB.swap bs=1024 count=524288#fallocate和dd的区别在于:#fallocate是先声明这么多,然后在具体用到的时候文件系统才分配真正的物理磁盘空间,就是用一点分配一点,#而dd是一开始就实实在在的写了512m的数据到物理磁盘空间。#所以作为测试来说fallocate方便些,因为刚开始不用写任何数据,要快dev@dev:~$ sudo fallocate -l 512m /mnt/512MiB.swap #修改文件的权限,避免其他用户对这个文件进行误操作dev@dev:~$ sudo chmod 600 /mnt/512MiB.swap #格式化为swap文件dev@dev:~$ sudo mkswap /mnt/512MiB.swap #将新的文件加入到系统中dev@dev:~$ sudo swapon /mnt/512MiB.swap #这时候可以看到新的swap文件已经被加入到系统中了,类型为file#这里可以看到由于优先级最高,第一个swap分区/dev/dm-1已经被使用了24Kdev@dev:~$ swapon -sFilename                Type        Size    Used    Priority/dev/dm-1               partition   524284  24      -1/dev/sdb1               partition   2096124 0       -2/mnt/512MiB.swap        file        524284  0       -3 #从free命令的输出可以看到,经过前面两轮添加swap分区和文件,#现在系统的交换空间已经变成3G(3144692K)了dev@dev:~$ free              total        used        free      shared  buff/cache   availableMem:         500192       39112        9564        1996      451516      430820Swap:       3144692          24     3144668 #同样为了保证系统重启后会自动加载我们新的swap文件,需要修改/etc/fstab文件dev@dev:~$ sudo sh -c 'echo "/mnt/512MiB.swap none  swap    sw   0    0" >> /etc/fstab'

注意:不是所有的文件系统都支持创建swap文件,如btrfs,在btrfs分区里创建swap文件将失败。

取消所有的swap

如果经过深思熟虑之后,确定不再需要swap,那么可以将所有的swap分区和文件从系统中移除,步骤和上面的刚好相反

#停掉所有系统正在使用的swapdev@dev:~$ sudo swapoff -a #swapon -s命令没有任何输出,free命令显示swap空间为0,说明swapoff成功dev@dev:~$ swapon -sdev@dev:~$ free              total        used        free      shared  buff/cache   availableMem:         500192       35924      348888        2004      115380      433924Swap:             0           0           0 #当然我们还需要修改/etc/fstab,否则下次重启后,系统又会重新挂载相应的swap分区和文件#使用自己喜欢的编辑器,将/etc/fstab中跟swap相关的三行删掉即可(本例中是三行,请根据实际情况调整)

如何优化swap性能?

怎么配置swap可以让它的性能更好呢?

不过话又说回来了,如果频繁的访问swap的话,怎么优化swap都没用,跟内存比还是低几个数量级,性能还是下降的厉害,如果不频繁访问swap的话,优化swap又有啥意义呢?所以其实优化swap性能的实际意义不大,这里了解一下就好。

配置swappiness

有时我们桌面环境确实配置了比较充裕的内存,并且也配置了swap空间,这个时候就希望尽量减少swap空间的使用,避免对系统性能造成影响,Linux早就帮我们考虑到这种情况了,在2.6内核中,增加了一个叫做swappiness的参数,用于配置需要将内存中不常用的数据移到swap中去的紧迫程度。这个参数的取值范围是0~100,0告诉内核尽可能的不要将内存数据移到swap中,也即只有在迫不得已的情况下才这么做,而100告诉内核只要有可能,尽量的将内存中不常访问的数据移到swap中。

Ubuntu的desktop和server的默认配置都是60(可能会随着版本变化),对于桌面环境来说,界面的响应速度直接关系到系统的流畅程度,如果内存比较充裕的话,可以将这个值设置的小一点,这样就尽可能的把数据留在内存中,从而唤醒后台界面程序会更快一些,Ubuntu desktop建议将该值设置为10,当然大家可以根据swap空间的实际使用情况,任意调整这个参数,直到自己满意的水平为止。对于服务器来说,主要性能衡量标准是整体的处理能力,而不是具体某一次的响应速度,能把更多的内存用来做I/O cache可能效果更好,所以Ubuntu server建议保持60的默认值。

dev@dev:~$ cat /proc/sys/vm/swappiness60
dev@dev:~$ sudo sysctl vm.swappiness=10vm.swappiness = 10dev@dev:~$ cat /proc/sys/vm/swappiness10

上面通过sysctl修改的swappiness值在系统重启后会失效,要想重启后继续生效,需要修改配置文件/etc/sysctl.conf,将下面这行修改成10,如果文件中找不到这行的话,在文件末位加上这行就可以了

vm.swappiness=10

什么是Linux系统

Linux是一种免费使用和自由传播的类UNIX操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统,使用Linux能运行主要的Unix工具软件、应用程序和网络协议。

关于Linux swap分区的示例分析问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

推荐阅读:
  1. Linux系统交换空间的示例分析
  2. Linux下Swap的用法

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

linux swap

上一篇:Linux基础中的service命令怎么用

下一篇:plsql可不可以连接mysql

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》