2012年08月12日

Apacheのプロセス毎のメモリ使用量

Apacheのパラメータチューニングをする上でプロセス毎のメモリ使用量を調べたいという場面があると思います。

その時参考にしたサイトはこちらです。

http://d.hatena.ne.jp/youhey/20110115/1295060276
http://d.hatena.ne.jp/naoya/20080212/1202830671

プロセス毎のメモリ使用量は単純に/proc/(PID)/statusのVmHWMを見ればいいわけではないようです。
親プロセスから子プロセスをforkすると、子プロセスが親プロセスのメモリ空間を共有するため、共有分を考慮しないといけません。
※この共有分を考慮しないと、1プロセスあたりのメモリ使用量を実際よりも多く見積もってしまうため、WEBサーバのマシンパワーを十分に生かせないチューニングをしてします可能性があります。

naoyaさんのサイトでは共有分を計算するのにperlを使っていますが、私はPerl Mongerではないので、別の手段は無いかと考えた結果、/proc/(PID)/smapsをawkで解析する手法にたどり着きました。

/proc/(PID)/smapsはrootユーザにしかread権限が無いようなので、rootユーザで以下のコマンドを実行します。

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

httpdプロセス起動直後は親プロセスのメモリのほとんどを共有しているため、ある程度Webサーバにアクセスがあった後に計測した方がより適切な結果が得られるようです。

(私が上記コマンドを試したサーバのLinux、Apacheのバージョンを覚えていないので、わかりましたら掲載します)

※上記情報は環境ごとに動作が異なる可能性がありますので、あくまでも参考情報としてご使用願います。記載内容に誤りがある場合はご指摘していただけると助かります。


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

トラックバックURL

コメントする

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