2012年08月12日

Apacheのプロセス毎のメモリ使用量を計算するコマンドを解説

前回、Apacheのプロセス毎のメモリ使用量を計算するコマンドを紹介しましたが、もう少し解説したいと思います。

プログラム構造が理解しやすいように、前回紹介したコマンドに改行を入れてみました。

echo -e "PID\tPPID\tRSS\tSHARED\tPRIVATE";
ps -ef
|grep httpd
|grep -v grep
|while read line;
do
    args=(${line});
    echo -ne ${args[1]}"\t"${args[2]}"\t";
    cat /proc/${args[1]}/smaps
    |awk '
        BEGIN{rss=0;shared=0;}
        /Rss/{rss+=$2;}
        /Shared/{shared+=$2;}
        END{printf("%.1f\t%.1f\t%.1f\n",rss/1024,shared/1024,(rss-shared)/1024);}
    ';
done

[1行目]
  タイトル行を画面出力(各列はTAB区切り)
[2行目]
  psコマンドでプロセス一覧を取得
[3、4行目]
  文字列「httpd」を含む行を抽出(grepコマンドのプロセスは除外する)
[5、6行目]
  取得した結果に対して、1行ずつ7行目〜15行目までの処理をループ
[7行目]
  3、4行目で取得した結果をスペースを区切り文字として分割した結果を配列に格納
[8行目]
  プロセスID、親プロセスIDを画面出力(改行はしない)
[9、10、16行目]
  プロセスIDに対するsmapsファイルを読み込み、awkコマンドに渡し、11行目〜14行目の処理をループ
[11行目]
  awkコマンド内での変数を初期化
[12行目]
  文字列「Rss」を含む行の場合、値を変数Rssに加算
[13行目]
  文字列「Shared」を含む行の場合、値を変数Sharedに加算
[14行目]
  smapsファイルの全ての行をループした後に、変数Rss、変数Shared、変数Rss−変数Sharedを画面出力し、改行する

今回awkコマンドを使いApacheのメモリ使用量を計算してみて、改めてawkコマンドの凄さを実感しました。

※もし何か改善できる点があったり、記載内容に誤りがある場合はご指摘していただけると助かります。


junjun_iphone at 20:13コメント(0)トラックバック(0)Apache   このエントリーをはてなブックマークに追加

トラックバックURL

コメントする

名前
 
  絵文字
 
 
記事検索
新着記事をつぶやいていきます。たまには新着記事以外もつぶやくかもしれません。
QRコード
QRコード
  • ライブドアブログ