jstatユーティリティは、Java HotSpot VMの組込みインストゥルメンテーションを使用して、実行中アプリケーションのパフォーマンスやリソース消費に関する情報を提供します。 このツールは、パフォーマンスの問題、特にヒープ・サイズ決定やガベージ・コレクションに関係する問題を診断するときに使用できます。 jstatユーティリティでは、特殊なオプション付きでVMを起動する必要はありません。 Java HotSpot VMの組込みインストゥルメンテーションはデフォルトで有効になります。 このユーティリティは、Oracleがサポートしているすべてのオペレーティング・システム・プラットフォームのJDKダウンロードに含まれています。
|
ノート: FAT32ファイル・システム上では、インストゥルメンテーションにアクセスできません。 |
jstatユーティリティの詳細は、jstatコマンドのマニュアル・ページを参照してください。
jstatユーティリティは、仮想マシン識別子(VMID)を使用してターゲット・プロセスを識別します。 ドキュメントにはVMIDの構文が記載されていますが、それに必要な唯一のコンポーネントはローカル仮想マシン識別子(LVMID)です。 LVMIDは、(必ずではありませんが、)一般的にはターゲットJVMプロセスに対するオペレーティング・システムのPIDです。
jstatツールで提供されるデータは、Oracle SolarisおよびLinuxオペレーティング・システムのツールvmstatおよびiostatで提供されるデータに似ています。
データをグラフィカルに表現する場合は、visualgcツールを使用できます。 visualgcツールを参照してください。
例2-32では、jstatユーティリティがLVMID番号2834に接続し、250ミリ秒間隔で7個のサンプルを取る-gcutilオプションの使用例を示しています。
例2-32 jstatユーティリティによる世代コレクションのサンプル
$ jstat -gcutil 2834 250 7
S0 S1 E O M YGC YGCT FGC FGCT GCT
0.00 99.74 13.49 7.86 95.82 3 0.124 0 0.000 0.124
0.00 99.74 13.49 7.86 95.82 3 0.124 0 0.000 0.124
0.00 99.74 13.49 7.86 95.82 3 0.124 0 0.000 0.124
0.00 99.74 13.49 7.86 95.82 3 0.124 0 0.000 0.124
0.00 99.74 13.49 7.86 95.82 3 0.124 0 0.000 0.124
0.00 99.74 13.49 7.86 95.82 3 0.124 0 0.000 0.124
0.00 99.74 13.49 7.86 95.82 3 0.124 0 0.000 0.124
この例の出力は、若い世代のコレクションが3番目と4番目のサンプル間で行われたことを示しています。 コレクションには0.017秒かかっており、オブジェクトがeden領域(E)からOld領域(O)に昇格したため、old領域の使用率は46.56%から54.60%に増加しています。
例2-33では、 jstatユーティリティがLVMID番号2834に接続し、250ミリ秒間隔でサンプルを取り、出力を表示する-gcnewオプションの使用例を示しています。 さらに、-h3オプションを使用して、データが3行表示されるたびに列ヘッダーを表示します。
例2-33 jstatユーティリティによる若い世代のコレクションのサンプル
$ jstat -gcnew -h3 2834 250
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
192.0 192.0 0.0 0.0 15 15 96.0 1984.0 942.0 218 1.999
192.0 192.0 0.0 0.0 15 15 96.0 1984.0 1024.8 218 1.999
192.0 192.0 0.0 0.0 15 15 96.0 1984.0 1068.1 218 1.999
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
192.0 192.0 0.0 0.0 15 15 96.0 1984.0 1109.0 218 1.999
192.0 192.0 0.0 103.2 1 15 96.0 1984.0 0.0 219 2.019
192.0 192.0 0.0 103.2 1 15 96.0 1984.0 71.6 219 2.019
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
192.0 192.0 0.0 103.2 1 15 96.0 1984.0 73.7 219 2.019
192.0 192.0 0.0 103.2 1 15 96.0 1984.0 78.0 219 2.019
192.0 192.0 0.0 103.2 1 15 96.0 1984.0 116.1 219 2.019
この例では、ヘッダー文字列の繰返しが見られるほかにも、4番目と5番目のサンプル間で若い世代のコレクションが発生し、その継続時間が0.02秒だったことがわかります。 このコレクションでは、Survivor領域1の使用率(S1U)が適切なSurvivorサイズ(DSS)を超過するのに十分なライブ・データが検出されました。 この結果、オブジェクトは、Old世代(この出力には非表示)へ昇格され、殿堂入りしきい値(TT)が、15から1へ降格されました。
例2-34では、jstatユーティリティがLVMID番号21891に接続し、250ミリ秒間隔で3つのサンプルを取る-gcoldcapacityオプションの使用例を示しています。 -tオプションを使用して、最初の列にサンプルごとのタイムスタンプを表示しています。
例2-34 jstatユーティリティによるOld世代の容量のサンプル
$ jstat -gcoldcapacity -t 21891 250 3
Timestamp OGCMN OGCMX OGC OC YGC FGC FGCT GCT
150.1 1408.0 60544.0 11696.0 11696.0 194 80 2.874 3.799
150.4 1408.0 60544.0 13820.0 13820.0 194 81 2.938 3.863
150.7 1408.0 60544.0 13820.0 13820.0 194 81 2.938 3.863
Timestamp列には、ターゲットJVMの起動時からの経過時間が、秒単位で報告されています。 さらに、-gcoldcapacity出力では、割当て要求または昇格要求あるいはその両方を満たすためにヒープが拡張するごとに、Old世代の容量(OGC)とOld領域の容量(OC)とが増加していることがわかります。 OGCは、81番目の全世代の容量(FGC)後に、11696 KBから13820 KBへ増加しています。 この世代(および領域)の最大容量は、60544 Kバイト(OGCMX)なので、まだ拡張できる余裕が残されています。