クラッシュの診断
クラッシュの原因を判別する方法は数多くあります。 通常、このプロセスでは、システムのセットアップを確認したり、各種の診断オプションを試行したりして、問題を切り分けることになります。
システム環境の確認
システムが、JVM のクラッシュを引き起こした状態になっている場合があります。 例えば、リソース不足 (メモリーやディスクなど) や安定度に関する問題などです。 さまざまなシステム情報が含まれている Javadump ファイルを確認します ( J9 VM リファレンスの「 Javadump の使用 」を参照してください)。 Javadump ファイルには、ディスクおよびメモリーのリソース情報を見つける方法が示されています。 システム・ログには、システムの問題が示されていることがあります。
プロセス情報の収集
クラッシュを引き起こす原因となった事象を正確に理解することは有効です。
コア・ファイル ( OpenJ9 ユーザー資料の「 ダンプ・ビューアー 」で説明されている) を分析して、スタック・トレースを生成します。スタック・トレースは、クラッシュの時点までに何が実行されていたかを示します。 考えられるのは、以下のものです。
- JNI ネイティブ・コード。
- JIT コンパイル・コードまたは AOT コンパイル・コード。 JITコードまたはAOTコードに問題がある場合、-Xintオプションを使用して、JITコードまたはAOTコードなしで実行してみてください。
- JVM コード。
- ltrace
- strace
Java 環境に関する検出
Javadump を使用して、各スレッドが何を実行していたか、およびどの Java™ メソッドが実行されていたかを判別します。 関数のアドレスとライブラリーのアドレスを突き合わせて、各時点で実行されていたコードのソースを判別します。
-verbose:gc オプションを使用して、Java ヒープの状態を確認し、以下を判別します。
- Java ヒープ・スペースが不足していました。これが原因でクラッシュが発生した可能性があります。
- ガーベッジ・コレクション中にクラッシュが発生したかどうか (ガーベッジ・コレクションで障害が発生した可能性があります)。 J9 VM リファレンスの「 ガーベッジ・コレクター診断データ (Garbage collector diagnostic data) 」を参照してください。
- ガーベッジ・コレクション後にクラッシュが発生したかどうか (メモリーが破損した可能性があります)。
メモリー管理について詳しくは、 J9 VM リファレンスの「 メモリー管理 」を参照してください。