1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

Swap使用过高处理

Swap使用过高处理方法

近期,巡检平台主机发现,生产有一台主机Swap使用很高,一看内存使用率高,基本耗尽。于是查了下资料:Linux内核为了提高读写效率与速度,会将文件在内存中进行缓存,这部分内存就是CacheMemory(缓存内存)。即使你的程序运行结束后,CacheMemory也不会自动释放。这就会导致你在Linux系统中程序频繁读写文件后,你会发现可用物理内存变少。

Swap使用过高处理

当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。

Swap分区在什么时候会使用,是受参数swappiness来控制的。这个参数值可为0-100,控制系统swap的使用程度。高数值可优先系统性能,在进程不活跃时主动将其转换出物理内存。低数值可优先互动性并尽量避免将进程转换处物理内存,并降低反应延迟。默认值为60。这只是一个权值,不是一个百分比值,涉及到系统内核复杂的算法。

Swap使用过高的处理方法

Swap使用过高的处理方法主要有:

  • 1.扩物理内存
  • 2.调整swappiness参数
  • 3.扩Swap

查看发现,我们的swappiness设置的是10,也就是说当物理内存大约剩余10%时,就会使用Swap分区,所以说没有什么调整空间了,当然调成0也可以。这里我们采用的是扩物理内存的方法。于是我们联系主机机侧扩容,扩容后物理内存可用20多G,但是Swap不会释放。

这时候,就想知道是哪些程序使用了Swap,于是通过脚本查询出使用Swap的top10进程:

for iin$(cd/proc;ls |grep"^[0-9]"|awk$0 >100);do awk/Swap:/{a=a+$2}END{print"$i",a/1024"M"} /proc/$i/smaps2>/dev/null;done |sort-k2nr|head-10

发现是43286这个进程占用了427M Swap,决定对该进程进行重启。Ps-ef|grep 43286,查看是nexus程序。于是重启:重启后,Swap释放了427M。于是将其他进程重启后,Swap完全释放。

来自IT那活儿微信公众号

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6178.html