我刚遇到交换问题,所以我试图找到哪个进程使用swap,并在this中显示脚本(getswap.sh)。这是php-fpm,大约200个子进程,要么是1M交换空间。所以我杀了php-fpm。然后我再次运行脚本,使用的总交换减少了很多。然后,导致 free -m 仅降低约3M。有什么问题?
在杀死php-fpm之前:
[root@eng /tmp]# bash getswap.sh | sort -n -k5>out
[root@eng /tmp]# cat out|awk '{a+=$5;}END{print a;}'
202076
[root@eng /tmp]# free -m
total used free shared buffers cached
Mem: 64259 60566 3692 0 192 17098
-/+ buffers/cache: 43275 20983
Swap: 4095 155 3940
杀死php-fpm后:
[root@eng /tmp]# bash getswap.sh | sort -n -k5>out
[root@eng /tmp]# cat out|awk '{a+=$5;}END{print a;}'
108456
[root@eng /tmp]# free -m
total used free shared buffers cached
Mem: 64259 60402 3857 0 192 17043
-/+ buffers/cache: 43166 21092
Swap: 4095 152 3943
和脚本:
#!/bin/bash
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
事先提前