一次关于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页面

猜你喜欢

转载自blog.51cto.com/zxdlife/2115711