Linux - Swap

Linux - Swap,第1张

首先,swap是硬盘上的一块空间。

其次,当内存没有多余空间的时候,可以将一部分数据交换到swap空间。也就是将内存中的一部分数据放到硬盘中,并释放内存空间。这样,释放出的内存空间就又可以被利用来存储其他数据了。

这样,本来只有4G的内存,如果swap有2G的话,可使用的内存可以认为是6G。

但是,硬盘的速度比内存慢太多太多了。因此swap只是对内存的一种补充,是在内存不足时对内存的扩充,但是不能代替内存使用。

内存不足时, *** 作系统 会选择 最久没被使用的内存数据 ,交换到swap空间。

注意,交换 *** 作是由 *** 作系统来进行的。

系统在什么情况或条件下才会使用Swap分区的空间呢? 其实是Linux通过一个参数swappiness来控制的。当然还涉及到复杂的算法。

这个参数值可为 0-100,控制系统 swap 的使用程度。

0告诉内核尽可能的不要将内存数据移到swap中,也即只有在迫不得已的情况下才这么做,而100告诉内核只要有可能,尽量的将内存中不常访问的数据移到swap中。默认值为 60。注意:这个只是一个权值,不是一个百分比值,涉及到系统内核复杂的算法

查看当前系统中swappiness的值

修改当前系统中swappiness的值

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

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

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

swap分区上面由于没有文件系统,所以相当于内核直接访问连续的磁盘空间,效率相对要高点,但由于swap分区一般安装系统时就分配好了了,后期要缩减空间和扩容都很不方便。

swap文件放在指定分区的文件系统里面,所以有可能受文件系统性能的影响,但据说2.6版本以后的内核可以直接访问swap文件对应的物理磁盘地址,相当于跳过了文件系统直接访问磁盘,不过如果swap文件在磁盘上的物理位置不连续时,还是会对性能产生不利影响,但其优点就是灵活,随时可以增加和移除swap文件。

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

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

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

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

通过如下命令,能查看所有进程的使用swap情况

查看某个进程swap占用内存大小脚本:

查看所有进程使用swap情况脚本:

Linux下交换内存耗尽如何查看及如何处理。以及查看shell脚本描述。交换内存不足时,启动应用时会报内存不足。

1、启动应用时报内存不足,直接Linux命令行top查看下。swap used100%,0free。

2、reboot服务器能有效的释放swap,可是很多情况下是不能重启服务器的。这时就要弄明白是什么占着内存。查看下/proc目录下内容,发现很多数字命名的目录,这些就是Linux的进程了。

3、要让进程释放swap的方法只有kill掉该进程了。写个脚本来查看具体是哪些进程占着内存啦。

一、对/proc目录下所有以数字为名的目录进行遍历

二、1目录是根进程重启会导致系统重启,所以直接排除掉。

三、算出每个进程占用内存的大小,然后按照大小排序

四、输出内存占用大于1MB的进程

4、将运行结果保存到swap.log文件中

5、查看swap.log.10325这个进程内存占用最多有130几M。

6、直接kill掉,然后再top查看。ok,swap一下子释放了很多,搞定。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/6253335.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-19
下一篇2023-03-19

发表评论

登录后才能评论

评论列表(0条)

    保存