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使用率が多い順にソート。