診断ツールおよびデータ
J9 仮想マシン (VM) は、さまざまなタイプの診断情報を分析用に生成します。 さまざまなツールを使用して、この情報の後処理を行い、問題判別に役立てることができます。
一部の診断情報は、Java™ ランタイム環境の特定の領域を対象としています。 例えば、ヒープ・ダンプからは、Java ヒープにおけるクラス・インスタンスやオブジェクト・インスタンスに関する有用な情報が得られますし、それに対して J9 トレースはより一般的な VM 問題をターゲットにしています。
問題判別における最初の目標の 1 つは、問題の原因となっている可能性が最も高い領域を識別することです。 Java の問題と思われる多くの問題は、他の場所で発生しています。 問題が発生する可能性のある領域として、以下のものがあります。
- Java 仮想マシン (VM)
- ネイティブ・コード
- Java アプリケーション
- オペレーティング・システムまたはシステム・リソース
- サブシステム (データベース・コードなど)
- ハードウェア
各領域での問題を解決するために、さまざまなツールや診断情報が必要になることがあります。 ここで説明するツールは、J9 VM に標準搭載されているか、または J9 VM で使用できるようになっています。 そのツールの多くがクロスプラットフォーム・ツールです。 他の多くのツール (システム・デバッガーなど) はハードウェア・ベンダーやシステム・ソフトウェア・ベンダーから提供されています。
診断情報の概要
実行中の J9 VM は、各種のイベントが発生したときに さまざまなタイプの診断データを生成するためのメカニズムを備えています。 一般に、このデータの生成はデフォルトの条件に基づいて行われますが、特定のオプション (-Xdump など) を使用して VM を起動することで制御できます。 旧バージョンの VM は環境変数を使用して診断情報の生成を制御していました。 これらの環境変数は引き続き使用できますが、推奨される方法ではありません。
生成される診断情報のフォーマットは J9 VM に固有のものであり、リリース間で異なる可能性があります。
以下のタイプの診断情報を生成できます。
- Java ダンプ・ファイル
- Java ダンプ・ファイルは、一部の VM では Javacore またはスレッド・ダンプと呼ばれることがあります。 このダンプ・ファイルは、人間が読めるフォーマットになっています。 このダンプ・ファイルは、オペレーティング・システム・シグナル、OutOfMemoryError 例外、またはユーザーが予約済みのキー組み合わせを入力したことが原因で VM が予期せず終了したときに、デフォルトで生成されます。 例えば、Windows で Ctrl-Break を使用すると、Java ダンプ・ファイルが生成されます。 また、アプリケーション内部からダンプ API からメソッド (例えば、 com.ibm.jvm.Dump.JavaDump()) を呼び出すことによって、Java ダンプ・ファイルを生成することもできます。 Java ダンプ・ファイルは、シグナルが発生した瞬間の VM の状態を要約します。 Java ダンプ・ファイルの内容の多くは、 J9 仮想マシンに固有のものです。 詳しくは、 Java ダンプ を参照してください。
- ヒープ・ダンプ・ファイル
- VM はユーザーの要求に応じてアプリケーション内から com.ibm.jvm.Dump.HeapDump() を呼び出すことでヒープ・ダンプ・ファイルを生成できますが、デフォルトでは OutOfMemoryError 例外が原因で VM が終了したときにヒープ・ダンプ・ファイルが生成されます。 -Xdump:heapオプションを使用して、ヒープ・ダンプ・ファイルの作成のタイミングをより細かく制御することができます。 例えば、特定回数のフル・ガーベッジ・コレクションが実行された後にヒープ・ダンプ・ファイルを要求できます。 Heapdump のデフォルト・フォーマット (phd ファイル) は、人が判読できるフォーマットになっていません。 このフォーマットは、Memory Analyzer などの有効なツールを使用して処理する必要があります。 詳しくは、 Heapdump の使用 を参照してください。
- システム・ダンプ・ファイル
- システム・ダンプ・ファイルは、アクティブなプロセス、スレッド、およびシステムメモリに関する情報を含むプラットフォーム固有のファイルです。 これらのファイルは、 Linux® プラットフォームではコア・ダンプとも呼ばれます。 システム・ダンプ・ファイルは通常は大きいサイズになります。 デフォルトでは、システム・ダンプ・ファイルは、GPF (一般保護違反) または重大な VM エラーやシステム・エラーが原因で、VM で予期せず障害が発生したときにのみ VM によって生成されます。 また、ダンプ API を使用してシステム・ダンプ・ファイルを要求することもできます。 例えば、アプリケーションから com.ibm.jvm.Dump.SystemDump() メソッドを呼び出すことができます。 -Xdump:system オプションを使用すると、他のイベントが発生したときにシステム・ダンプ・ファイルを生成できます。
- JIT ダンプ・ファイル
- 一般保護違反 (GPF) または abort イベントが発生すると、JIT (Just-In-Time) コンパイラーは、問題のトラブルシューティングに役立つ可能性がある診断データが含まれた小さいバイナリー・ダンプ・ファイルを生成します。 このファイルの場所について詳しくは、 ファイルの場所を参照してください。
- ガーベッジ・コレクション・データ
- -verbose:gcオプションを指定して開始されたVMは、ガーベッジ・コレクター自体の問題やユーザー・アプリケーションの設計の問題を分析するために使用できるXML形式の出力を生成します。 他のさまざまなオプションを使用して、生成されるガーベッジ・コレクター診断情報の特性と量を制御できます。 詳しくは、 ガーベッジ・コレクター診断データ (Garbage Collector diagnostic data)を参照してください。
- トレース・データ
- J9 トレースにより、Java コードおよび内部 VM コード内の実行ポイントをログに記録することができます。 -Xtrace オプションを使用すると、トレース・ポイントの数と領域を制御できるとともに、保持されるトレース・バッファーのサイズと特性を制御できます。 障害時点の内部トレース・バッファーはシステム・ダンプ・ファイルにも含まれています。 そのバッファーをシステム・ダンプ・ファイルから抽出するためのツールが提供されています。 通常は、トレース・データはエンコードされた形式でファイルに書き込まれてから、トレース・フォーマッターによって可読形式に変換されます。 ただし、生成されるトレースが少量であり、パフォーマンスの問題が発生しない場合は、トレースを STDERR に転送可能であり、トレースは事前にフォーマット設定されます。 詳しくは、 Java アプリケーションのトレースを参照してください。
- 他のデータ
- 以下の J9 コンポーネントに関する診断情報を生成するための特別なオプションが用意されています。
- JIT ( JIT または AOT の問題の診断を参照)
- クラス・ロード ( クラス・ロードの問題の診断を参照)
- 共有クラス ( OpenJ9 ユーザー資料の「 クラス・データ共有に関する問題の診断 」を参照)
クロスプラットフォーム・ツールの要約
以下のクロスプラットフォーム・ツールは問題の診断に役立てるために使用できます。
- IBM® Monitoring and Diagnostic Tools
- IBM Monitoring and Diagnostic Tools は、アプリケーションをモニターして診断データを分析するための GUI ベースのツール・セットです。 これらのツールの目的は、診断タスクをできる限り短時間で簡単に実行することです。 ツールについて詳しくは、「 IBM Monitoring and Diagnostic tools 」資料を参照してください。
- クロスプラットフォーム・ダンプ・ビューアー
- システム共通で使用できるダンプ・ビューアー jdmpview では、J9 VM 関連のデータを解決するためにオペレーティング・システムが生成するダンプ・ファイルを使用します。 ダンプ・ビューアーは、VM を把握し、その内部構造を分析するために使用できます。 これは、VM の予期しない終了をデバッグするのに便利なツールです。 ダンプ・ビューアーはクロスプラットフォームであるため、ダンプをどのシステムからも、システム・デバッガーの知識がなくても、分析できます。 詳しくは、 ダンプ・ビューアーを参照してください。
- JVMTI ツール
- JVM ツール・インターフェース (JVMTI) は、Java 仮想マシン・プロファイラー・インターフェース (JVMPI) および Java 仮想マシン・デバッグ・インターフェース (JVMDI) を置き換える、ツールで使用するプログラミング・インターフェースです。 JVMTI について詳しくは、 Java 仮想マシン・ツール・インターフェースを参照してください。
- JPDA ツール
- Java Platform Debugging Architecture (JPDA) は、Java VM をデバッグするための一般的な標準です。 J9 は完全 JPDA 互換です。 JPDA デバッガーはすべて、J9 VM に組み込むことができます。 JPDA ツールはデバッガーであるため、アプリケーションにおけるメモリー・リークや、ハングなど、再現性のあるアプリケーション問題をトレースする場合に最適なツールです。 JPDA ツールの例として、 Eclipse for Java にバンドルされているデバッガーがあります。
- DTFJ
- Diagnostic Tool Framework for Java (DTFJ) は、Java 診断ツールの構築をサポートするために使用される Java アプリケーション・プログラミング・インターフェース (API) です。 DTFJ は、システム・ダンプ・ファイルを調べて、Java 仮想マシンの内部構造を分析することができます。 DTFJ は純粋な Java コードで実装され、DTFJ を使用して作成されたツールはクロスプラットフォームにすることができます。 このため、あるマシンから収集されたダンプ・ファイルを、より便利な別のリモート・マシンで分析できます。 例えば、 z/OS® マシンで生成されたダンプ・ファイルは、Windows Thinkpad で分析できます。 詳しくは、 Java 用診断ツール・フレームワークの使用を参照してください。
- トレース・フォーマット設定
- トレースは主要な診断ツールです。 J9 VM では、トレースの対象およびトレースの実行時期の決定について、高い柔軟性を実現しています。 この柔軟性により、トレースを調整して、パフォーマンスへの影響を相対的に小さくすることができます。 J9VMには、多くの組み込みトレース・ポイントも含まれています。 本リリースでは、いくつかのレベル 1 トレース・ポイントおよび例外トレース・ポイントに対して、maximal トレースがデフォルトで使用可能になっています。 コマンド行オプションにより、トレース対象を正確に設定し、トレースの出力先を指定することができます。 トレース出力は、通常はエンコード・フォーマットであり、トレース・フォーマッターが正常に表示されることが必要になります。