2.5.4 JavaVMが異常終了した場合
JavaVMで異常終了が発生した場合の対処方法と,異常終了が発生した場合に出力される情報について説明します。
- 〈この項の構成〉
(1) 異常終了時の対処方法
UNIXの場合,異常終了時には,次の手順で対処してください。なお,Windowsの場合には,この対処は不要です。
-
異常終了が発生したマシン上でjavatraceコマンドを実行します。
javatrace.logファイルが出力されます。javatraceコマンドの実行方法については,「4.18 JavaVMのスタックトレース情報」を参照してください。
-
取得したjavatrace.logファイルを,エラーリポートファイル(hs_err_pid<プロセスID>.log)とあわせて保守員に送付します。
エラーリポートファイルの取得方法については,「4.11 JavaVM出力メッセージログ(標準出力またはエラーリポートファイル)」を参照してください。
-
次のコマンドを実行して,JavaVMの実行ファイルやトラブル発生時にロードされていたライブラリ,およびcoreダンプのアーカイブファイルを作成します。
-
AIXの場合
snapcoreコマンドを実行してください。paxコマンドで圧縮されたアーカイブファイルが作成されます。
-
Linuxの場合
compressコマンドがインストールされている場合はcar_tar_Zコマンドを実行してください。compressコマンドで圧縮されたアーカイブファイルが作成されます。
gzipコマンドがインストールされている場合はcar_tar_gzコマンドを実行してください。gzipコマンドで圧縮されたアーカイブファイルが作成されます。
-
-
作成されたアーカイブファイルを,保守員に送付します。
(2) 異常終了時に出力される情報
JavaVMで次の異常終了が発生した場合に出力される情報について説明します。
-
JavaVM処理中にCヒープ不足が発生した場合
-
JavaVM処理中のCヒープ不足以外のOutOfMemoryErrorが発生した場合
-
内部論理エラーが発生した場合
(a) JavaVM処理中にCヒープ不足が発生した場合
Cヒープが不足すると,次のようなメッセージに続いて,メモリの状態,Javaヒープ情報,およびスタックトレース情報が標準出力およびエラーリポートファイル(hs_err_pid<プロセスID>.log)に出力されます。そのあとで,JavaVMが強制終了されます。
出力された情報を確認して対処してください。
Exception in thread <スレッド名称> java.lang.OutOfMemoryError:requested <メモリ確保要求サイズ> bytes [ for <内部調査用メッセージ>] .
(b) JavaVM処理中のCヒープ不足以外のOutOfMemoryErrorが発生した場合
J2EEサーバを起動するときのオプションとして-XX:+HitachiOutOfMemoryAbortを設定している場合,次の要因によってOutOfMemoryErrorが発生したときに,メッセージを出力してJavaVMが強制終了します。出力された情報を確認して対処してください。
また,OutOfMemoryハンドリング機能が有効の場合(-XX:+HitachiOutOfMemoryHandlingを設定している場合),OutOfMemoryError発生の要因がJavaヒープ不足またはMetaspace領域不足のときには,強制終了しないことがあります。
- 強制終了する要因
-
-
Javaヒープ不足
-
Metaspace領域不足
-
J2SEクラスライブラリでのCヒープ不足
なお,JavaVM処理中にCヒープ不足になった場合は,このオプションの指定に関係なく強制終了します。
終了時には,次のメッセージが出力されます。
java.lang.OutOfMemoryError occurred. JavaVM aborted because of specified -XX:+HitachiOutOfMemoryAbort options.
-
- 強制終了するタイミング
-
JavaVMが強制終了するタイミングは,オプションの設定によって異なります。
-
オプションとして-XX:+HitachiOutOfMemoryStackTraceが指定されている場合は,スタックトレースが出力されたあとで終了します。ただし,あらかじめjava.io.File.deleteOnExitメソッドやjava.lang.Runtime.addShutdownHookメソッドによってJavaVM終了時に実行する処理を登録していた場合も,それらは実行されないで強制終了します。
-
オプションとして-XX:+HitachiOutOfMemoryAbortThreadDumpが指定されている場合は,スレッドダンプを出力したあとで終了します。特に,「Javaヒープ不足」または「Metaspace領域不足」の場合は,オプションとして-XX:+HitachiOutOfMemoryAbortThreadDumpWithJHeapProfも設定されているときには,クラス別統計情報付きスレッドダンプを出力したあとで終了します。
-
- OutOfMemoryハンドリング機能が有効な場合の動作
-
J2EEサーバを起動するときのオプションとして-XX:+HitachiOutOfMemoryAbortに加えて-XX:+HitachiOutOfMemoryHandlingを設定すると,OutOfMemoryハンドリング機能が有効になります。この場合,JavaヒープまたはMetaspace領域不足が発生した際に,OutOfMemoryのハンドリングによって強制終了するかどうかの判定処理が実行されます。判定処理の結果,次に示すOutOfMemoryErrorスロー条件のすべてに合致した場合は,強制終了が実行されません。
- OutOfMemoryErrorスロー条件
-
-
Javaヒープ不足,またはMetaspace領域不足が原因のOutOfMemoryである。
-
Webコンテナ上のWebアプリケーション(Servlet/JSP)が実行中のリクエスト処理,EJBクライアントアプリケーションから呼び出されたEnterprise Beanが実行中の処理,Message-driven Beanが実行中の処理,またはTimer Serviceから呼び出されたEnterprise Beanが実行中の処理で発生したOutOfMemoryである。
-
OutOfMemoryErrorスロー除外条件に該当しない。
-
- OutOfMemoryErrorスロー除外条件
-
今回のOutOfMemoryが発生した時刻から過去1時間以内のJavaヒープ不足が原因のOutOfMemoryの発生回数と,Metaspace領域不足が原因のOutOfMemoryの発生回数の合計値(今回のOutOfMemoryを含む)が,-XX:HitachiOutOfMemoryHandlingMaxThrowCountオプションに指定した値よりも大きい。
詳細は,マニュアル「アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「-XX:[+|-]HitachiOutOfMemoryHandling(OutOfMemoryハンドリングオプション)」を参照してください。
OutOfMemoryハンドリング機能が有効な場合,Javaヒープ不足,およびMetaspace領域不足が原因のOutOfMemory発生時に,OutOfMemoryの発生頻度に関する情報がJavaVMログファイルに出力されます。
(c) 内部論理エラーが発生した場合
内部論理エラーが発生すると,エラーが発生したJavaVMの情報,調査用のエラーIDおよび問題が発生したスレッドを示すメッセージが,標準出力およびエラーリポートファイル(hs_err_pid<プロセスID>.log)に出力されます。出力された情報を保守員に送付してください。