for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do
#获取进程PID
PID=`echo $DIR | cut -d / -f 3`
复制代码
查看指定进程得swap
#!/bin/bash
#author: zclinux
#script name: swap_sum.sh
#version: v2
#description: 查看具体进程占用多少swap
#./swap_sum.sh /proc/`pidof xxx`/smaps
SUM=0
OVERALL=0
file=$1
#获取进程的所有分区中SWAP值
for SWAP in `grep Swap $file 2>/dev/null| grep -v SwapPss | awk '{ print $2 }'`
do
#进程swap值求和
let SUM=$SUM+$SWAP
done
# echo " Swap used: $SUM - $PROGNAME"
#总共swap分区值求和
let OVERALL=$OVERALL+$SUM
# echo "Overall swap used: $OVERALL"
## 可读性处理
## 小于1024kb直接输出
if [ $OVERALL -le 1024 ];then
echo "Total swap is used: ${OVERALL}KB "
## 小于1024字节,转换为MB
elif [ $OVERALL -le 1048576 ];then
let sum=OVERALL/1024
echo "Total swap is used: ${sum}MB"
## 不存在复数,所以剩下1024*1024 转换为GB
else
let sum=OVERALL/1048576
echo "Total swap is used: ${sum}GB"
fi
复制代码
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 2>/dev/null ; done | sort -k2nr | head -10