系统管理员可能都遇见过这样的情况,登录一台服务器,使用free命令查看内存,发现swap分区被占用。到底是什么进程占用了这部分swap分区呢?
    从2.6.16版本的kernel开始,我们可以使用proc文件系统中的smaps来查找这个问题。下边是一个列出所有进程占用swap分区情况的列表。可以通过简单修改就可以用于统计在/proc/$PID/smaps查出。以下是脚本
:

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 -k2nr



另一种比较详细:

#!/bin/bash  

# Get current swap usage for all running processes  

# writted by xly  


function getswap {  

   SUM=0  

       OVERALL=0  

       for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do  

           PID=`echo $DIR | cut -d / -f 3`  

               PROGNAME=`ps -p $PID -o comm --no-headers`  

               for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'`  

                   do  

                       let SUM=$SUM+$SWAP  

                           done  

                           echo "PID=$PID - Swap used: $SUM - ($PROGNAME )"  

                           let OVERALL=$OVERALL+$SUM  

                           SUM=0  


                           done  

                           echo "Overall swap used: $OVERALL"  

}  


getswap  

#getswap|egrep -v "Swap used: 0"