dshimizu/blog

アルファ版

プロセスのメモリ使用状況を一括で取得するシェルスクリプトを作った

ps コマンドとか pmap とかでも出力されて大体の値を取得できるし、というか最近はモニタリングツールも充実しているし OS で細々みる事もないけど一応。 プロセスごとの smaps の値を集計しているだけ。

#!/bin/bash

pids=( `ps aux | grep $1 | grep -v grep | grep -v check_smaps.sh | awk '{print $2}'` )

echo -e "PID\tRSS\tSHARED\tP_Dirty\tP_Clean\tS_Dirty\tP_Clean\tSHARED/RSS"

for pid in ${pids[*]} ; do
  [ 0 = $(ls -l /proc/${pid}/smaps > /dev/null 2>&1 ; echo $?) ] && \
  echo -ne "${pid}\t" && sudo cat /proc/${pid}/smaps | awk '/^Shared_/{shared_sum += $2};/Rss/{rss_sum += $2};/Private_Dirty/{pdirty_sum += $2};/Private_Clean/{pclean_sum += $2};/Shared_Dirty/{sdirty_sum += $2};/Shared_Clean/{sclean_sum += $2};{OFS = "\t"}  END{print rss_sum,  shared_sum, pdirty_sum, pclean_sum, sdirty_sum, sclean_sum, shared_sum/rss_sum * 100}' ;
done
  • 実行
% ./local/bin/check_smaps.sh apache
PID RSS SHARED  P_Dirty P_Clean S_Dirty P_Clean SHARED/RSS
3620310 28240   22944   1632    3664    10220   12724   81.2465
3620806 68000   61276   6724    0   47148   14128   90.1118
3620807 66668   62032   4636    0   47904   14128   93.0461
3620808 65248   58736   6512    0   44892   13844   90.0196
3620809 69712   63092   6620    0   48956   14136   90.5038
3620810 68728   62980   5748    0   48832   14148   91.6366
3630136 69472   62904   6568    0   48768   14136   90.5458
3630169 69204   60556   8648    0   46712   13844   87.5036
3630171 65024   59368   5656    0   45588   13780   91.3017