IBM Pattern Modeling and Analysis Tool for Java Garbage Collector(PMAT)
verbosegcデータを解析し、時系列の折れ線グラフを表示するツールです。以下のURLからダウンロードできます。
他の解析ツールは特定ベンダーのJDKにのみ対応するものが多いのですが、これはIBM、Solaris、HP-UXのJDK 1.4~5.0に対応するスグレモノです。2007年7月28日時点の最新版は1.3.2です。
起動
ga132.zipをダウンロードして解凍すると、中に「ga132.jar」が入っています。これが本体です。以下のコマンドで起動しましょう。
java -Xmx256m -jar ga132.jar
このコマンドはバッチファイルにしておくと便利です。
-Xmxはヒープ(メモリ)の最大使用サイズを指定しています。native_stderr.logが大きい場合、解析には十分なヒープを確保する必要があります。256Mbytesでは足りない場合、もっと大きなサイズ、例えば512m(512Mbytes)を指定し、ヒープを確保してください。
※PMATの1.4では読み込み時にParseExceptionが発生します。以下のようにオプションを追加して回避できます。(Kazooさん、情報ありがとうございます。)
java -Duser.language=en -Duser.country=US -Xmx256m -jar ga140.jar
verbosegcデータを開く
verbosegcデータを以下の手順で開きます。
- PMATのメニュー→[File]→[Open verbosegc Files(IBM SDK)]→ファイル選択ダイアログでログファイルを選択し、[Open]
「native_stderr.log」を開くと解析サマリが表示されます。
このサマリには重要な情報があります。特に重要な項目は以下のとおりです。
| 項目 | 説明 |
| Number of Garbage Collections | GC(SYS+AF)の発生回数。 |
| Number of Allocation failures | GC(AF)の発生回数。負荷が大きいほど頻繁に発生します。 |
| Total Garbage Collection pause | GCを行うために処理を停止した時間の合計[s]。 |
| Maximum Allocation Request | AFが発生する原因となったヒープ確保の要求の最大サイズ[bytes]。 |
GCには二つのタイプ、SYS(システムGC)とAF(Allocation Failure)があります。
| SYS | System.gc()を呼び出すことで発生するGC。サーバ自身が、システムの起動時と終了時に呼び出す。 |
| AF | アプリケーションがメモリを確保(newでインスタンスを作るとき)するときに、ヒープ内に十分なエリアを確保するためにGCが発生する。 |
ポイント:ピーク時のAF発生間隔
AF発生間隔を計算しましょう。
- AF発生間隔[回/s]=単位時間内のAF発生回数/単位時間[s]
ピーク時のAF発生間隔は、サーバの限界負荷を見極める目安になります。2分間に1回程度は正常な範囲ですが、短くなればなるほど負荷が高いことになります。メモリが不足しているか、負荷が想定以上であると考えら得ます。
ポイント:ヒープ確保の要求の最大サイズ
大きなヒープ確保要求はGCを発生させる確率が高くなります。オブジェクトを生成する部分は、「小さければ多くてもよい」という考えで設計してください。


