-XX:[+|-]HitachiOutOfMemoryHandling(OutOfMemoryハンドリングオプション)
形式
- -XX:+HitachiOutOfMemoryHandling
-
OutOfMemoryハンドリング機能を有効にします。
- -XX:-HitachiOutOfMemoryHandling
-
OutOfMemoryハンドリング機能を無効にします。
説明
OutOfMemoryハンドリング機能を有効にするかどうかを指定します。このオプションは,J2EEサーバをJ2EEサーバモードで実行した場合にだけ有効です。
OutOfMemoryハンドリング機能は,OutOfMemory発生時強制終了機能(-XX:+HitachiOutOfMemoryAbort)と組み合わせて使用します。OutOfMemory発生時強制終了機能が無効(-XX:-HitachiOutOfMemoryAbort)になっている場合,OutOfMemoryハンドリング機能は無効になります。
OutOfMemoryハンドリング機能を有効にした場合,OutOfMemory発生時にOutOfMemoryErrorスロー条件が判定されます。具体的には,次に示す処理を実行中にJavaヒープ不足やMetaspace領域,Compressed Class Space不足が原因のOutOfMemoryが発生した場合に,J2EEサーバの実行を継続するかどうかが判定されます。
-
Webコンテナ上のWebアプリケーション(Servlet/JSP)が実行中のリクエスト処理
-
EJBクライアントアプリケーションから呼び出されたEnterprise Beanが実行中の処理
-
Message-driven Beanが実行中の処理
-
Timer Serviceから呼び出されたEnterprise Beanが実行中の処理
判定の結果,J2EEサーバの実行が継続される場合は,java.lang.OutOfMemoryErrorがスローされて,OutOfMemoryが発生したリクエスト処理だけが中止されます。
JavaVMは,判定結果によって次のように動作します。ただし,Webアプリケーションでjava.lang.OutOfMemoryErrorをキャッチしている場合は,その処理に従います。
-
OutOfMemoryErrorスロー条件を満たしている場合
java.lang.OutOfMemoryErrorをスローして,OutOfMemoryが発生したリクエスト処理だけを中止します。
-
OutOfMemoryErrorスロー条件を満たしていない場合
OutOfMemory発生時強制終了機能によって,JavaVMを強制終了します。
OutOfMemoryErrorスロー条件を次に示します。なお,OutOfMemoryErrorスロー条件に合致しない場合,OutOfMemory発生時強制終了機能によって,JavaVMは強制終了します。
- OutOfMemoryErrorスロー条件
-
OutOfMemoryが発生した場合に,次に示す条件すべてに該当するとき,JavaVMはOutOfMemoryErrorスロー条件を満たしているものと判定して,異常終了しないでjava.lang.OutOfMemoryErrorをスローします。
-
Javaヒープ不足,またはMetaspace領域,Compressed Class Space不足が原因のOutOfMemoryである。
-
Webコンテナ上のWebアプリケーション(Servlet/JSP)が実行中のリクエスト処理,EJBクライアントアプリケーションから呼び出されたEnterprise Beanが実行中の処理,Message-driven Beanが実行中の処理,またはTimer Serviceから呼び出されたEnterprise Beanが実行中の処理で発生したOutOfMemoryである。
-
OutOfMemoryErrorスロー除外条件に該当しない。
- OutOfMemoryErrorスロー除外条件
-
今回のOutOfMemoryが発生した時刻から過去1時間以内のJavaヒープ不足が原因のOutOfMemoryの発生回数とMetaspace領域,Compressed Class Space不足が原因のOutOfMemoryの発生回数の合計値(今回のOutOfMemoryを含む)が,-XX:HitachiOutOfMemoryHandlingMaxThrowCountオプション値に指定した値よりも大きい。
-
OutOfMemory発生時強制終了機能とOutOfMemoryハンドリング機能のOutOfMemory発生要因ごとの動作を次の表に示します。OutOfMemoryハンドリング機能が有効かどうかは,OutOfMemoryの発生原因がJavaヒープ不足またはMetaspace領域,Compressed Class Space不足の場合の動作に影響します。
OutOfMemory発生要因 |
OutOfMemory発生時強制終了機能の対象となるかどうか (OutOfMemory発生時の動作※1) |
OutOfMemoryハンドリング機能の対象となるかどうか (OutOfMemory発生時の動作) |
---|---|---|
Javaヒープ不足 |
対象になります (JavaVMは強制終了します)。 |
対象になります (判定結果に従って動作します※2)。 |
Metaspace領域不足 |
対象になります (JavaVMは強制終了します)。 |
対象になります (判定結果に従って動作します※2)。 |
Compressed Class Space不足 |
対象になります (JavaVMは強制終了します)。 |
対象になります (判定結果に従って動作します※2)。 |
Cヒープ不足 |
対象になります (JavaVMは強制終了します)。 |
対象になりません (JavaVMは強制終了します※3)。 |
Unkown |
対象になりません (java.lang.OutOfMemoryErrorがスローされます)。 |
対象になりません (java.lang.OutOfMemoryErrorがスローされます)。 |
Thread Limit |
対象になりません (java.lang.OutOfMemoryErrorがスローされます)。 |
対象になりません (java.lang.OutOfMemoryErrorがスローされます)。 |
また,OutOfMemoryハンドリング機能が有効な場合,Javaヒープ不足,およびMetaspace領域,Compressed Class Space不足が原因の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の発生回数とMetaspace領域,Compressed Class Space不足が原因の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サーバを再起動してください。また,その後の運用ではこの機能を無効にしてください。
-
OutOfMemoryハンドリング機能が有効な場合,OutOfMemory発生時強制終了機能が有効(-XX:+HitachiOutOfMemoryAbort)でも,jspやServletでの処理中にOutOfMemoryが発生したときは,強制終了しないでJava SEの仕様どおりにjava.lang.OutOfMemoryErrorがスローされます。
そのため,例えば,finally節を使用して適切にリソースを解放していないようなときには,リソースの解放漏れなどが発生することがあります。
このような問題を避けて,従来どおり強制終了させたい場合は,OutOfMemoryハンドリング機能を無効にしてください。