kmkのメモ帳

気が向いたときにLinuxだったり、プログラミングだったり、適当なメモを書いてます。

Blogは移転しました。

自動的にリダイレクトします。

CentOSでプロセスごとのSwap使用率確認(ワンライナー)

サーバを運用していると、どのプロセスがどの程度Swapを使用しているか手軽に確認したいときが結構ある。

CentOSでは「/proc/プロセスID/」のディレクトリ配下に各プロセス毎のSwap使用量の情報が格納されてるので、そこを確認すればOK。 ただし、CentOS5系とCentOS6系では/proc/以下への格納の仕方が違うので、それぞれ下記の通り確認する。

CentOS 6系

CentOS 6系ではSwap使用量が「/proc/プロセスID/status」の「VmSwap」にプロセス毎に集計されてるので、grep等で抜き出してやる。

CentOS 6系 プロセス毎のSwap使用率確認コマンド(わんらいなー)
# for pid in `grep VmSwap /proc/*/status | cut -d/ -f3` ;do echo "========PID: $pid========"; egrep 'Name|VmSwap' /proc/$pid/status ;echo ; done

出力例

========PID: 1========
Name:   init        <---プロセス名
VmSwap:      292 kB <---プロセスのSwap使用量

========PID: 1043========
Name:   portreserve
VmSwap:       88 kB

========PID: 1053========
Name:   rsyslogd
VmSwap:      556 kB

ワンライナー簡単に説明

「for pid in `grep VmSwap /proc/*/status | cut -d/ -f3`」

↑Swapを使用しているプロセスID一覧を取得。

「egrep 'Name|VmSwap' /proc/$pid/status」

↑取得したプロセスIDぶんだけ、プロセス名と、スワップ使用率をegrepして表示。終わり。

CentOS 5系

CentOS 5系では、Swap使用量がプロセス毎に集計されていないので、手動で集計する必要がある。

CentOS 5系 プロセス毎のSwap使用率確認コマンド(無理やりわんらいなー)
# nice grep Swap /proc/*/smaps |grep -v " 0 kB$"|awk '{print $1}'| awk -F\/ '{print $3}'| sort | uniq | while read pid ; do echo -n "PID:$pid " ; nice grep Swap /proc/$pid/smaps |awk '{sum+=$2}END{print "/ " sum "kB"}'; done | sort -k3 -n
※Swapを使用していない(Swap使用 0 kB)プロセスは出力しないようにしています。

出力例

PID:2936 / 4kB <---プロセスID / プロセスのSwap使用量
PID:3495 / 8kB
PID:798 / 8kB
PID:3496 / 16kB
PID:2937 / 28kB

ワンライナー簡単に説明

「nice grep Swap /proc/*/smaps |grep -v " 0 kB$"|awk '{print $1}'| awk -F\/ '{print $3}'| sort | uniq |」

↑Swap使用しているプロセスID一覧を取得。プロセスIDは重複があるのでsort&uniqしてる。

「while read pid ; do echo -n "PID:$pid " ; 」

↑取得したSwap使用しているプロセス一覧でループ。

「nice grep Swap /proc/$pid/smaps |awk '{sum+=$2}END{print "/ " sum "kB"}'; done」

↑プロセスごとにSwap使用量を足し算して出力。

「| sort -k3 -n」

↑Swap使用率が多い順にソート。

# # #