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