-XX:[+|-]HitachiOutOfMemoryHandling(OutOfMemoryハンドリングオプション)

形式

-XX:+HitachiOutOfMemoryHandling
OutOfMemoryハンドリング機能を有効にします。
-XX:-HitachiOutOfMemoryHandling
OutOfMemoryハンドリング機能を無効にします。

説明

OutOfMemoryハンドリング機能を有効にするかどうかを指定します。このオプションは,J2EEサーバをJ2EEサーバモードで実行した場合にだけ有効です。

OutOfMemoryハンドリング機能は,OutOfMemory発生時強制終了機能(-XX:+HitachiOutOfMemoryAbort)と組み合わせて使用します。OutOfMemory発生時強制終了機能が無効(-XX:-HitachiOutOfMemoryAbort)になっている場合,OutOfMemoryハンドリング機能は無効になります。

OutOfMemoryハンドリング機能を有効にした場合,OutOfMemory発生時にOutOfMemoryErrorスロー条件が判定されます。具体的には,次に示す処理を実行中にJavaヒープ不足やPermヒープ不足が原因のOutOfMemoryが発生した場合に,J2EEサーバの実行を継続するかどうかが判定されます。

判定の結果,J2EEサーバの実行が継続される場合は,java.lang.OutOfMemoryErrorがスローされて,OutOfMemoryが発生したリクエスト処理だけが中止されます。

JavaVMは,判定結果によって次のように動作します。ただし,Webアプリケーションでjava.lang.OutOfMemoryErrorをキャッチしている場合は,その処理に従います。

OutOfMemoryErrorスロー条件を次に示します。なお,OutOfMemoryErrorスロー条件に合致しない場合,OutOfMemory発生時強制終了機能によって,JavaVMは強制終了します。

OutOfMemoryErrorスロー条件
OutOfMemoryが発生した場合に,次に示す条件すべてに該当するとき,JavaVMはOutOfMemoryErrorスロー条件を満たしているものと判定して,異常終了しないでjava.lang.OutOfMemoryErrorをスローします。
  • Javaヒープ不足,またはPermヒープ不足が原因のOutOfMemoryである。
  • Webコンテナ上のWebアプリケーション(Servlet/JSP)が実行中のリクエスト処理,EJBクライアントアプリケーションから呼び出されたEnterprise Beanが実行中の処理,Message-driven Beanが実行中の処理,またはTimer Serviceから呼び出されたEnterprise Beanが実行中の処理で発生したOutOfMemoryである。
  • OutOfMemoryErrorスロー除外条件に該当しない。
OutOfMemoryErrorスロー除外条件
今回のOutOfMemoryが発生した時刻から過去1時間以内のJavaヒープ不足が原因のOutOfMemoryの発生回数とPermヒープ不足が原因のOutOfMemoryの発生回数の合計値(今回のOutOfMemoryを含む)が,-XX:HitachiOutOfMemoryHandlingMaxThrowCountオプション値に指定した値よりも大きい。

OutOfMemory発生時強制終了機能とOutOfMemoryハンドリング機能のOutOfMemory発生要因ごとの動作を次の表に示します。OutOfMemoryハンドリング機能が有効かどうかは,OutOfMemoryの発生原因がJavaヒープ不足またはPermヒープ不足の場合の動作に影響します。

表19-8 OutOfMemory発生時強制終了機能とOutOfMemoryハンドリング機能のOutOfMemory発生要因ごとの動作

OutOfMemory発生要因OutOfMemory発生時強制終了機能の対象となるかどうか
(OutOfMemory発生時の動作※1
OutOfMemoryハンドリング機能の対象となるかどうか
(OutOfMemory発生時の動作)
Javaヒープ不足対象になります
(JavaVMは強制終了します)。
対象になります
(判定結果に従って動作します※2)。
Permヒープ不足対象になります
(JavaVMは強制終了します)。
対象になります
(判定結果に従って動作します※2)。
Cヒープ不足対象になります
(JavaVMは強制終了します)。
対象になりません
(JavaVMは強制終了します※3)。
Unkown対象になりません
(java.lang.OutOfMemoryErrorがスローされます)。
対象になりません
(java.lang.OutOfMemoryErrorがスローされます)。
Thread Limit対象になりません
(java.lang.OutOfMemoryErrorがスローされます)。
対象になりません
(java.lang.OutOfMemoryErrorがスローされます)。

注※1 OutOfMemoryハンドリング機能は無効(-XX:-HitachiOutOfMemoryHandling)の場合の動作です。

注※2 OutOfMemoryErrorスロー条件を満たしている場合,java.lang.OutOfMemoryErrorがスローされます。OutOfMemoryErrorスロー条件を満たしていない場合,OutOfMemory発生時強制終了機能の処理に移行して,JavaVMは強制終了します。

注※3 OutOfMemory発生時強制終了機能によって,JavaVMは強制終了します。


また,OutOfMemoryハンドリング機能が有効な場合,Javaヒープ不足,およびPermヒープ不足が原因のOutOfMemory発生時にOutOfMemoryの発生頻度に関する情報が日立JavaVMログファイルに出力されます。

デフォルト値
  • -XX:-HitachiOutOfMemoryHandling
前提オプション
  • -XX:+HitachiOutOfMemoryAbort

出力形式

[id][Thread: thread_id]<date>[Handling: oom_count(max_oom_count)]

出力内容を次に説明します。

id
OMH(日立JavaVMログファイル識別子)。
thread_id
スレッドID(スレッドダンプに出力されているtid)。
date
OutOfMemoryをハンドリングした日時。
oom_count
今回のOutOfMemoryが発生した時刻から過去1時間以内の,Javaヒープ不足が原因のOutOfMemoryの発生回数とPermヒープ不足が原因のOutOfMemoryの発生回数の合計値(今回のOutOfMemoryを含む)。
ただし,今回のOutOfMemoryも含めて,1時間以内の発生回数の合計値が3601を超えた場合でも,出力項目の最大値は3601になります。
max_oom_count
-XX:HitachiOutOfMemoryHandlingMaxThrowCountオプションに指定した値。

出力例

[OMH][Thread: 0x00927f48]<Tue Aug 24 19:02:19 2010>[Handling: 1(60)]

注意事項

OutOfMemoryハンドリング機能は,OutOfMemoryの根本原因を解決したり,OutOfMemory発生によるJ2EEサーバの終了を確実に回避したりする機能ではありません。また,OutOfMemory発生後にJ2EEサーバの実行を継続できることを確実に保証する機能でもありません。この機能は,ユーザープログラム処理の問題による突発的なOutOfMemoryが発生した場合に,J2EEサーバの終了を一時的に防ぐための機能です。

java.lang.OutOfMemoryErrorは,OutOfMemoryハンドリング機能の設定に関係なく,ヒープが枯渇している場合に発生します。java.lang.OutOfMemoryErrorが発生した場合には,J2EEサーバをできるだけ速やかに再起動して回復すること,そのあとでOutOfMemoryの根本原因を解決することを推奨します。

なお,java.lang.OutOfMemoryErrorをスローすることによって,リソースのリークやロックなどが発生し,J2EEサーバに予期しない動作が発生するおそれがあります。このため,この機能を有効にしている場合にOutOfMemoryが発生したときには,適切なタイミングでJ2EEサーバを再起動する運用にしてください。また,J2EEサーバに予期しない動作が発生することを避けたい場合は,この機能を無効にしてください。この場合,突発的なOutOfMemoryが発生したときには,J2EEサーバは終了します。

この機能を有効にした場合に,予期しない動作になってしまったときは,J2EEサーバを再起動してください。また,その後の運用ではこの機能を無効にしてください。