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」

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
分類: My_Note-Unix,標籤: , , , 。這篇內容的永久連結

在〈Linux 查看正在吃 swap 的程式〉中有 8 則留言

  1. ruilung表示:

    借轉到這兒
    https://ruilung-notes.blogspot.tw/2017/02/centos-68-pid-vmswap.html

    一行版在centos 6.8下跑不出來,簡單改寫成
    cat /proc/*/status | grep -E 'VmSwap|^Pid' | grep VmSwap -B1

    要更漂亮就要更加工它囉

  2. Dio表示:

    文章中這行有誤"grep VmSwap /proc/status"
    應該更正為"grep VmSwap /proc/*/status"

  3. LianSheng表示:

    部分 process 需要權限才能看到

    要嘛就用 root 執行,
    或者在第 i 行 改成 for SWAP in `sudo grep Swap $DIR/smaps 2> /dev/null | awk '{ print $2 }'`

    • LianSheng表示:

      另外,在 Ubuntu 18.04 之下使用這個腳本,我發現其總量跟 System Monitor 看到的結果不同。
      看起來很像兩倍,但從腳本內我有看不出個所以然來,請問這是怎麽回事呢?
      截圖:https://i.imgur.com/gBgol3V.jpg
      (排版有調整過,但不影響內容)

    • Tsung表示:

      這個我也不太清楚,不過這程式是吃 /proc/*/VmSwap 的數值,這個是 process 的實際使用 swap 的數量

      System Monitor 到底看哪個數值?或者 系統是否有額外吃的 Swap?

      這支程式沒有考量到這些地方

    • Tsung表示:

      我剛剛有跑過,也在檢查一下,都是 ls -l /proc/*/smaps

      權限都是 444,應該都可以讀取才是

      是不是有某些特殊程式權限不同?

LianSheng 發表迴響 取消回覆

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料