Linux Server 記憶體夠用的話,通常就不會使用到 swap,但是已經使用到 swap 的話,要怎麼查出是哪些程式使用的呢?
- 註:單純使用到 swap 的 PID 列表可查 /proc/*/status 的 VmSwap 值,使用下述即可:
- grep VmSwap /proc/*/status
Linux 查看正在吃 swap 的程式
由上述 VmSwap 抓 PID,可以同時抓 VmSwap 和 Name 的欄位,簡單的列出來:(下述取自:How can I know which process is using swap?)
for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done
改寫整成一行:for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 2 -n -r | less
雖然在此已經夠用,不過下面找到的 script 可以更清楚的顯示出來使用量,所以要看哪些 Process 使用到 swap,可以使用下述的 script 來達成。
下述程式取自此篇:Find Out What Is Using Your Swap
- vim /usr/local/bin/swaplist.sh
#!/bin/bash # Get current swap usage for all running processes # Erik Ljungstrom 27/05/2011 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"
- chmod +x swaplist.sh
- swaplist.sh | egrep -v "Swap used: 0" | sort -n -k 5
相關網頁
- Linux: Find Out What Process Are Using Swap Space - 此篇推薦觀看,smem 也相當實用
- memory - How to find out which processes are swapping in linux?
Save
Save