Cosminexus アプリケーションサーバ V8 リファレンス 定義編(サーバ定義)

[目次][索引][前へ][次へ]

-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サーバを再起動してください。また,その後の運用ではこの機能を無効にしてください。