Personal tools
You are here: Home ブログ 井上 ローテクなメモリ使用量監視方法
« February 2010 »
Su Mo Tu We Th Fr Sa
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28            
Recent entries
「DHTからAmazon Dynamoまで」プレゼン資料を公開します inoue 2010-02-07
演算子の記法 inoue 2010-02-03
mod_proxy_balancerを使う時のProxyPassReverseの設定 inoue 2010-02-02
プログラマの指標 inoue 2010-02-02
IPA未踏ユース採択結果 inoue 2010-01-26
synergy にある典型的なバグ(とパッチ) inoue 2010-01-24
「パーフェクトJava」の「国際化」の章の原稿を公開 inoue 2010-01-22
「P2P教科書」を読む inoue 2010-01-15
tcpstat: netstatより細かくネットワーク統計量を見るツール inoue 2010-01-11
Apacheバージョン1系はそろそろ保守終了の様子 inoue 2010-01-06
Oracleのインデックスのツリーのバランスが崩れる? inoue 2009-12-27
HTTPのリダイレクトとPOSTメソッドの話 inoue 2009-12-26
Recent comments
Re:「DHTからAmazon Dynamoまで」プレゼン資料を公開します inoue 2010-02-08
Re:演算子の記法 Anonymous Coward 2010-02-03
Re:「パーフェクトJava」の「国際化」の章の原稿を公開 inoue 2010-01-30
Re:「パーフェクトJava」の「国際化」の章の原稿を公開 Anonymous User 2010-01-29
Re:synergy にある典型的なバグ(とパッチ) inoue 2010-01-28
Re:「パーフェクトJava」の「国際化」の章の原稿を公開 inoue 2010-01-20
Re:「パーフェクトJava」の「国際化」の章の原稿を公開 Anonymous User 2010-01-19
Re:tcpstat: netstatより細かくネットワーク統計量を見るツール Anonymous User 2010-01-15
Re:ソフトウェアのマニュアル管理に適したツール? fchiba 2010-01-08
Re:ソフトウェアのマニュアル管理に適したツール? inoue 2010-01-07
Re:ソフトウェアのマニュアル管理に適したツール? fchiba 2010-01-07
Re:Apacheバージョン1系はそろそろ保守終了の様子 おおたに 2010-01-07
Categories
カテゴリなし
 
Document Actions

ローテクなメモリ使用量監視方法

GNU/Linux上のプロセスのメモリ使用量のローテクな監視方法です。 必要なのはシェルとgnuplotだけです。

シェルはこんなコードです。 やっていることはprocファイルシステムのstatmファイルの中身を一定期間ごとに読み出すだけです。 statmファイルの中身の意味を覚えたりはしないので、コードのusage出力に書いておきます(Linuxのソースコードからコピー)。 コマンドの使い方は変に文書化するより、このようにコマンド自体にしゃべらせる方が利便性と保守性に優れています。

メモリリークを調べるには、先頭カラム(size)の量を監視すれば充分です。 2番目のカラム(resident)は、RSSとも略されるメモリ使用量で、(そのプロセスが)実メモリを占めているメモリ使用量です(sizeは仮想メモリ上のメモリ使用量。ページアウトされた分も含みます)。

#!/bin/sh
export LANG=C

if [ "x"$1 = "x" ];
then
  echo "usage: $0 pid-to-watch"
  echo "usage example: $0 \`pidof process-name-to-watch\` | tee /tmp/mem.log"
  echo "output:# sprintf(buffer,\"%d %d %d %d %d %d %d\\n\""
  echo "                 size, resident, shared, text, lib, data, 0)"
  exit
fi

pid=$1
while : 
do
  echo -n `date '+%Y-%m-%d-%H:%M'` ' '
  cat /proc/${pid}/statm
  sleep 1m
done

出力を適当なファイルに書き出して、gnuplotでグラフ化します。 そのためのスクリプトは次のようになります。

set xdata time
set timefmt "%Y-%m-%d-%H:%M"
set format x "%H:%M"
# set xrange ["2007-12-11-16:00":]
plot "/tmp/watch-mem.log" using 1:2 with lines

コメントアウトしている set xrange の行は、見たい範囲を限定したい時に使います。 iceweaselのメモリ使用量のグラフは次のようになりました。

/Members/inoue/images/misc/gnuplot.png

メモリリークを調べたい時は、このグラフと(対象プロセスの)ログをつき合わせます。 こんなローテク、役に立つのか疑問に思うかもしれませんが、ハイテク(LeakTracer,ccmalloc,Valgrind,mpatrol)で見つからなかったメモリリークのバグの箇所を見つけられました。単にハイテクを使いこなせていないだけ、という噂もありますが。

The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/inoue/low-tech-to-watch-memory/tbping
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
This helps us prevent automated spamming.
Captcha Image


Copyright(C) 2001 - 2006 Ariel Networks, Inc. All rights reserved.