JDK 5.0環境でjvmstatを使用する

Javaアプリケーションに対してメモリリークが発生していないかを確認するため、ガベージコレクションがいつ発生しているとか、メモリが現在どのくらい使用されているのかを調べるのに、いつもjvmstatを使用します。

J2SE 1.4では、別途jvmstatをインストールする(ダウンロードして解凍して、パスを通す)必要がありましたが、J2SE 5.0からは一部名前が変更されたものの、標準的にJDKに取り込まれています。


J2SE 1.4でのコマンド J2SE 5.0でのコマンド
jvmstat jstat
jvmps jps
perfagent jstatd

例えばTomcat5.5を起動して、


C:\>jps

と実行すると、


5932 Jps
5924 Bootstrap

と結果が返ってきます。
この5932とか5924というのがプロセスIDですね。
で、上の結果から、Tomcatが使用しているプロセスIDは5924というのが分かったので、


C:\>jstat -gc 5924 10s

と実行すると、10秒ごとに、


S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC
192.0 192.0 0.0 0.1 2112.0 1700.8 20032.0 17861.7 34048.0 33976.4 2020 30.807 1636

という感じで、メモリ状況が表示されます。


C:\>jstat -gc 5924 10s > C:\jstat.log

なんて感じで実行すると、指定したファイルに結果が書き込まれていくのですね。

また、グラフィカルにJVMの状況を確認するための「visualgc」については、JDKに取り込まれていませんので、別途jvmstat3.0をダウンロードする必要があります。


http://java.sun.com/performance/jvmstat/

ダウンロード後解凍して、
Linuxでは「(配置場所)/bin」、
Windowsでは「(配置場所)/bat」にパスを通しておいてください。