一次关于swap占用问题的处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一次关于swap占用问题的处理相关的知识,希望对你有一定的参考价值。

最近工作中遇到这样一个问题,记录一下。

现象:

一台机器swap报警,监控图显示swap使用率达到了75%左右,但查看内存使用率监控发现并不高,只有20%。

排查思路:

  1. 登录机器使用free命令查看也是如此,说明监控本身没有问题。
  2. 考虑把监控图时间拉长,发现两天前这台机器的内存使用率有一个峰值,当时内存使用率达到了80%,同时swap使用率也随之上升到了80%左右,接着内存使用率很快降下来,但是swap并没有随着内存空闲下来而相应下降,而是一直维持在75%左右。

解决:

在剩余内存大于swap占用空间的前提下,执行:

swapoff -a && swapon -a

该命令会将当前swap的内容重新导入内存。

调研:

  1. 为什么在内存释放后,swap不会自动释放,在网上没有找到很有说服力的解释。
  2. 有一说free查看到的只是swap分配出去的空间,并不代表当前就在使用,可以执行vmstat命令查看si/so两列确认当前是否正在使用swap,详见链接。不过我想既然已分配,使用不使用就是随时的事,还是直接释放为好。
  3. 关于vm.swappiness内核参数,在3.5+内核以后0表示关闭swap,因此建议3.5+以后的内核将该参数最小设置为1,而不是0,除非确实想要关闭swap。(上一链接中也有说明)
  4. 更多关于swap的问题,可以参考Ubuntu的FAQ页面

以上是关于一次关于swap占用问题的处理的主要内容,如果未能解决你的问题,请参考以下文章

关于查看进程所占用物理内存的问题

swap空间占用过高解决方案

Linux查看占用swap的进程脚本

关于CentOS 6下Hadoop占用系统态CPU高的处理办法

查看哪些进程占用了SWAP分区?

关于 boost::swap 的问题