Java VMのガーベジコレクション処理の影響で業務レスポンス低下が発生する可能性を検出し、警告メッセージ(ISJEE_OM3204)で通知します。
Java VMのガーベジコレクションの影響を通知する警告メッセージには、5種類の詳細メッセージがあります。この他の詳細メッセージは、「5.16.1 予兆監視警告メッセージ(Javaヒープ)」を参照してください。
警告メッセージは、ガーベジコレクション処理による業務レスポンス低下の危険性を通知するもので、Java VMの動作異常を示すものではありません。また、警告が出力された状態で業務を継続したときに、Javaアプリケーションの実行に支障が発生すると一概に言えませんが、警告メッセージが出力されない状態にすることにより、安定稼動するシステムを構築できます。
ガーベジコレクション処理時間に関する警告メッセージ
詳細メッセージは、以下の発生条件で出力されます。
なお、詳細メッセージに含まれる時刻情報のフォーマットは「年/月/日 時:分:秒.ミリ秒」となります。
詳細メッセージ | 警告の意味 | 発生条件 |
---|---|---|
It takes long time to do the garbage collections many times: TIME={0} AVERAGE={1} | Full GCに長い時間かかる状態が続いています。 | 過去3回のFull GC時間の平均値が5秒より長い場合。 |
ガーベジコレクション処理中は、メッセージに記載されたFull GCの平均時間の間、アプリケーションが停止する場合があります。メッセージが出力された場合、レスポンス低下などの問題が発生する可能性があります。
予兆監視警告メッセージ(ガーベジコレクション処理時間)の原因と対処
ガーベジコレクション処理時間に関する警告メッセージが出力される原因は、以下が考えられます。
物理メモリの枯渇など、システムのリソースが不足している。
CPU負荷の高い別のアプリケーションが同時に動作しているなど、メッセージの対象となったJavaプロセスの実行が阻害されている。
Javaヒープのサイズ指定が大きすぎて、ガーベジコレクション処理に時間を要している。
アプリケーションのレスポンスに問題がある場合は、これらの要因を確認してください。
Javaヒープサイズの指定を小さくするチューニングは、十分な検証が必要です。JavaアプリケーションがJavaヒープを多く消費するプログラムの場合、Javaヒープサイズの指定を小さくするとOufOfMemoryErrorが発生することも考えられます。
ガーベジコレクション間隔に関する警告メッセージ
詳細メッセージは、以下の発生条件で出力されます。いずれも、ガーベジコレクションが短い間隔で連続して発生した場合に発生します。頻繁なガーベジコレクション処理の実行は、アプリケーションのレスポンス低下などの問題が発生する可能性があります。
なお、詳細メッセージに含まれる時刻情報のフォーマットは「年/月/日 時:分:秒.ミリ秒」となります。
詳細メッセージ | 警告の意味 | 発生条件 (注1) |
---|---|---|
Inefficient garbage collections are run with the short intervals: TIME={0} WEIGHT={1} | 非効率なFull GCが短い間隔で発生しています。 | 過去3回のFull GC間隔時間が20秒より短い場合、かつ、Full GC直前のOld世代領域の使用率が65%よりも小さい場合。 |
The garbage collections are run with the short intervals because of the lack of the memory: TIME={0} SIZE={1} | Javaヒープ不足のため、Full GCが短い間隔で発生しています。 | 過去3回のFull GC間隔時間が20秒より短い場合、かつ、Full GC直後のJavaヒープ使用率が65%より大きい場合。 |
System.gc() are run with the short intervals: TIME={0} INTERVAL={1} | java.lang.System.gc()メソッドやjava.lang.Runtime.gc()メソッドが短い間隔で発生しています。 | 過去3回のFull GC間隔時間が20秒より短い場合、かつ、java.lang.System.gc()メソッドやjava.lang.Runtime.gc()メソッドによって発生したFull GCの頻度が高い場合。 |
The garbage collections are run with the short intervals: TIME={0} INTERVAL={1} | Full GCが短い間隔で発生しています。 | 過去3回のFull GC間隔時間が20秒より短い場合。 |
注1) 発生条件を満たした場合でも、ガーベジコレクションの処理時間が短い場合は、メッセージの出力を行わない場合があります。
注2) 警告を回避するためには、警告発生時のJavaヒープ領域のサイズを大きくする必要があります。「SIZE」として通知している値は、そのための目安となる追加量です。
なお「SIZE」として通知している値は、あくまで目安です。実際に必要な追加量とは異なる場合がありますので、不足リソースの情報を元に、きちんとチューニングを実施してください。
予兆監視警告メッセージ(ガーベジコレクション間隔)の原因と対処
Javaヒープの空きがあるにもかかわらず、ガーベジコレクション処理が発生している可能性があります。原因として以下が考えられます。
Javaヒープの初期サイズ(-Xms)が小さく、Javaヒープ拡張を繰り返している。
JavaヒープのNew世代領域の割合が大きくなるように指定している(New世代領域については、「チューニングガイド」の「JDK/JREのチューニング」の「基礎知識」を参照してください)。
アプリケーションのレスポンスに問題がある場合は、Javaヒープに関するチューニングオプションに問題がないか確認してください。
Javaヒープの不足が考えられます。「予兆監視警告メッセージ(Javaヒープ不足)の想定される原因と対処」を参照して、対処してください。Javaヒープサイズの上限値を増加しても警告が出力される場合、Javaアプリケーションが短時間に大量のメモリを消費している可能性があります。
アプリケーションがjava.lang.System.gc()メソッド、java.lang.Runtime.gc()メソッドを短い間隔で呼び出しています。頻繁なガーベジコレクション実行が、アプリケーションのレスポンスに影響している場合は、これらのメソッドの利用が必要かアプリケーションの見直しを行ってください。
FJVMのjava.lang.System.gc()実行時におけるスタックトレース出力機能を利用すると、java.lang.System.gc()メソッド、java.lang.Runtime.gc()メソッドの実行箇所を特定することができます。詳細は、以下のマニュアルを参照してください。
「チューニングガイド」> 「JDK/JREのチューニング」>「FJVM」>「java.lang.System.gc()実行時におけるスタックトレース出力機能」
なお、JavaのRMI機能による自動ガーベジコレクション間隔が極端に短く設定されている場合、本メッセージが出力されることがあります。アプリケーションでjava.lang.System.gc()メソッド、java.lang.Runtime.gc()メソッドを頻繁に実行していない場合は、JavaのRMI機能による自動ガーベジコレクション間隔の設定値を確認してください。詳細は、「5.3.3 ガーベジコレクション発生回数」を参照してください。
「The garbage collections are run with the short intervals」のメッセージが出力されます。