jstatの使い方

J2SE1.5から導入されたJVMの統計データ監視ツール、jstatの使い方メモ。

jstatを使えば、稼働中のJVMのヒープメモリの状態、パーマネント領域の状態、クラスローダーの統計情報などを参照することができる。イメージとしては、topコマンドみたいな感じで、JVMのリソース情報を監視できる。障害時の調査ユーティリティツールのひとつとして威力を発揮します。

まあ、プロファイリングツールではないので、メモリリークの有無は読み取れるけど、リーク箇所までは特定できないんで、そこは使い分けが必要だけど。

ここでは例として、Linuxのローカルマシン上で動いているtomcatの統計データを監視するケースを取り上げます。ただ、Windowsでも、同じ手順でOKのはず。

まず、jpsコマンドで、JVMのプロセスIDを確認。

$ jps
12893 Jps
12829 Bootstrap
13122 Bootstrap

上記のように、複数のtomcatが上がっていて区別が付かない場合は、-v オプションでパラメータを表示できるんで、それを見て判別できる。

監視対象とするJVMのプロセスIDが分かったら、それに対して統計を取る。ここでは、-gcutilオプションを使用して、ガベージコレクションの統計データの概要を、3秒置きに表示してみる。

$ jstat -gcutil -t 12829 3000

Timestamp S0 S1 E O P YGC YGCT FGC FGCT GCT 3164.2 0.00 100.00 92.65 28.56 99.40 33 0.340 0 0.000 0.340 3167.2 31.67 0.00 70.19 28.57 99.51 34 0.346 0 0.000 0.346 3170.2 0.00 97.65 22.95 29.60 99.94 35 0.359 0 0.000 0.359

jstat の書式は以下のとおり。

jstat <出力オプション> <プロセスID> <データ取得間隔(ms)>

-t オプションを付けると、JVMの起動からの経過時間がタイムスタンプとして付加されるっぽい。連続稼動に対するテスト中の統計データを取るときなんかに使えるかな。

統計出力オプションは、-gcutil以外にも便利なのがたくさん用意されている。出力オプションとその読み方については、sunのページにまとまっているので、それが参考になります。まずは -gcutil でざっくり見てから、-gc で詳細を見ていくような感じか。

なお、リモートマシンのJVMを監視する場合には、クライアント側で、ポリシーファイルを使って、jstatdを起動させておく必要がある。実運用で監視ログを残したいような場合は、この方法が良いだろうなー。

このエントリーのトラックバックURL
http://www.deftrash.com/admin/mt4/mt-tb.cgi/381