有时候监控出swap的使用量太高,而又不知道swap到底被谁用了,这时可以使用该方法找出占用swap最多的进程。在Linux内核 2.6.16中引入了一个系统内存接口特性,这个接口位于/proc/$pid/目录下的smaps文件中,一看内容发现是进程内存映像信息,比同一目录下的maps文件更详细些。
1:cat /proc/1/smaps
^Swap开头的那个表示的是占用Swap的量的大小。
那么查看你想要看的进程所使用的swap只需要:
awk ‘/^Swap:/ {SWAP+=$2}END{print SWAP” KB”}’ /proc/$(pid)/smaps
2:要统计出哪个命令占用最高,简单点就直接执行以下命令即可
for i in `cd /proc;ls |grep "^[0-9]"|awk ' $0 >100'` ;do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps ;done |sort -nrk 2
3:找出占用swap高的进程后,看看能不能做什么调整,如果实在没得调整,就使用下列的命令把swap压入内存吧
swapoff -a && swapon -a #得先用free -m查看下内存还剩下多少