この章の構成は、次のとおりです。
トラブルシューティングのためのJavaの設定
JVMのトラブルシューティングのためのオプションおよびフラグの有効化
関連データの収集
トラブルシューティングの関連データを収集可能にするためのJava環境およびコマンド行オプションを設定します。
Javaを設定する手順は次のとおりです。
トラブルシューティングの関連データを収集可能にするためのJVMオプションやフラグを設定します。
収集するデータはシステムごとに異なり、問題が発生した場合に使用するデータによっても異なります。次のデータの収集を検討します。
ulimit -c unlimited
注意:
コア・ファイルを有効にするかどうかを決定するときは、システムでクラッシュが発生した場合の対処方法を検討します。コア・ファイルを参照したいと思いますか。多くのJavaユーザーには、コア・ファイルは大して役に立ちません。ただし、クラッシュが発生した場合に、gdbなどのネイティブ・デバッガまたはServiceability Agentを使用してデバッグする場合は、アプリケーションを起動する前にコア・ファイルを有効にしてください。
gdb
多くの場合、クラッシュを再現するのは困難です。そのため、アプリケーションを起動する前にコア・ファイルを有効にします。
-XX:+HeapDumpOnOutOfMemoryError
OutOfMemoryError
ヒープ・ダンプは、特に大きなJavaヒープで実行する場合、コア・ファイルと同様に非常に大きくなる可能性があります。
再び、アプリケーションでOutOfMemoryErrorが発生した場合の対処方法を考えます。エラーの発生時に、ヒープを検査したいと思いますか。その場合、アプリケーションで予想外のOutOfMemoryErrorが発生したときにこのデータを取得するために、フラグをデフォルトで設定します。
連続フライト記録を実行するためにJavaを設定します。連続フライト記録は、JFRイベントの循環バッファです。アプリケーションで問題が発生した場合は、最後の1時間の実行からデータをダンプできます。JFRイベントは、メモリー・リーク、ネットワーク・エラー、高いCPU使用率、スレッドのブロックなど、幅広い問題のデバッグに役立ちます。
連続フライト記録を使用した実行のオーバーヘッドは非常に低いです。Java連続フライト記録の作成の詳細は、「フライト記録の作成方法」を参照してください。
-verbosegc
ガベージ・コレクションの実行に時間がかかっているかどうか。
空きメモリーが経時的に減少しているかどうか。
ガベージ・コレクタのログは、アプリケーションがOutOFMemoryErrorをスローするか、パフォーマンスの問題が発生した場合、問題の診断に役立ちます。したがって、-verbosegcフラグをデフォルトでオンにすると、問題のトラブルシューティングに役立ちます。
OutOFMemoryError
UseGClogFileRotation
NumberOfGCLogFiles
アプリケーションをスクリプトで起動する場合は、実行する前に、java -versionを実行してJavaバージョンを印刷し、コマンド行を印刷してください。または、JVMの引数に-XX+PrintCommandLineFlagsと-showversionを追加することもできます。
java -version
-XX+PrintCommandLineFlags
-showversion
別の方法は、Javaアプリケーションの起動後にJMXを有効にする方法で、ManagementAgent.start診断コマンドを使用します。コマンドで送信できるフラグの一覧については、jcmd <pid> help ManagementAgent.startを実行してください。
ManagementAgent.start
jcmd <pid> help ManagementAgent.start
「jcmdユーティリティ」を参照してください。
アプリケーションで問題が発生した場合、問題の詳細をデバッグするには、特に再起動により前のファイルが削除される場合は、システムを再起動する前に関連データを収集してください。
クラッシュの問題に関するコア・ファイル。
Javaのクラッシュの場合に出力されるhs_errテキスト・ファイル。
hs_err
ログ・ファイル: Javaおよびアプリケーションのログ。
-XX:+HeapDumpOnOutOfMemoryErrorのJavaヒープ・ダンプ。
Javaフライト記録(有効な場合)。問題によってアプリケーションが終了しなかった場合は、連続記録をダンプします。
スタック・トレース: システムを再起動する前に、jcmd <pid> Thread.printを使用して複数のスタック・トレースを取ります。
jcmd <pid> Thread.print
フライト記録をダンプします(有効な場合)。
コア・ダンプの強制: アプリケーションを正常に閉じることができない場合は、LinuxまたはSolarisシステムで、アプリケーションを停止し、kill -6 <pid>を使用してコア・ファイルを強制します。
kill -6 <pid>
ロギング・フレームワークの使用は、後のデバッグを可能にするための良い方法です。
特定のモジュールで問題が発生する場合は、そのモジュールのロギングを有効にできる必要があります。また、情報、デバッグ、トレースなどの異なるロギング・レベルの指定も役立ちます。