X

Linux 查看正在吃 swap 的程式

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

  1. 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"
  2. chmod +x swaplist.sh
  3. swaplist.sh | egrep -v "Swap used: 0" | sort -n -k 5

相關網頁

Save

Save

Tsung: 對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
Related Post