Java VMのメモリ割当てプールおよびPermanent世代領域を監視して、Javaヒープ不足の危険性を警告メッセージ(ISJEE_OM3204)で通知します。
JavaヒープおよびPermanent世代領域の問題を通知する警告メッセージには、3種類の詳細メッセージがあります。この他の詳細メッセージは、「5.16.2 予兆監視警告メッセージ(ガーベジコレクション)」を参照してください。
詳細メッセージは、以下の発生条件で出力されます。
なお、詳細メッセージに含まれる時刻情報のフォーマットは「年/月/日 時:分:秒.ミリ秒」となります。
詳細メッセージ | 警告の意味 | 発生条件 |
---|---|---|
There are possibilities of OutOfMemoryError because of the lack of the memory: TIME={0} SIZE={1} | Javaヒープ不足のため、OutOfMemoryErrorが発生する危険性があります。 | Full GC直後のJavaヒープ使用率が95%より大きい場合。 |
There are possibilities of OutOfMemoryError because of the lack of the Perm region: TIME={0} SIZE={1} | Permanent世代領域不足のため、OutOfMemoryErrorが発生する危険性があります。 | Permanent世代領域の使用量が90%より大きい場合。 |
OutOfMemoryError warning is occurred because the Perm region is exhausted: TIME={0} SIZE={1} | Permanent世代領域の使用量が急増しているため、OutOfMemoryErrorが発生する危険性があります。 | 前回の測定からのPermanent世代領域の使用量の増加が、Permanent世代領域全体の1割より大きく、かつ、次も同じ割合で増えると仮定したときのPermanent世代領域の使用率が、90%より大きい場合。 なお「SIZE」として通知している値は、同じ割合で増えると仮定した際に用いた大きさ(増加量)です。 |
注) 警告を回避するためには、警告発生時のJavaヒープ領域またはPermanent世代領域のサイズを大きくする必要があります。「SIZE」として通知している値は、そのための目安となる追加量です。
なお「SIZE」として通知している値は、あくまで目安です。実際に必要な追加量とは異なる場合がありますので、不足リソースの情報を元に、きちんとチューニングを実施してください。
予兆監視警告メッセージ(Javaヒープ不足)の想定される原因と対処
Javaヒープ不足により警告メッセージが出力される原因は、Java VMによってあらかじめ予約されたJavaヒープまたはPermanent世代領域の不足です。予約するJavaヒープサイズ、Permanent世代領域のサイズが不適切(小さすぎる、または大きすぎる)な場合や、Javaアプリケーションがメモリリークを起こしている可能性があります。
警告メッセージが出力された場合、そのまま業務を継続するとメモリ不足やレスポンス低下などの問題が発生する可能性があります。これらの問題を解決するために警告メッセージに記載されている不足リソースの情報やモニタロギング機能を使用してチューニングを実施してください。
警告メッセージを回避するひとつの方法として、以下のようにJavaヒープまたはPermanent世代領域を増加する方法があります。
現在の不足リソースの上限値を20%増加させて運用を再開します。
それでも警告が出力された場合にはさらに20%増加させ、警告が出力されなくなるまで繰り返しチューニングを実施します。
チューニングを繰り返して警告メッセージが出力されない状態とすることにより、安定稼動するシステムを構築できます。JavaヒープサイズとPermanent世代領域サイズの上限値を増加しても回避できない場合は、Javaアプリケーションが大量にメモリを消費していないか、メモリリークを起こしていないか見直しを行ってください。
Java VMのヒープ領域およびPerm領域をチューニングする場合、IJServerクラスタのJava VMオプションに、ヒープ領域およびPerm領域の上限値を設定するオプションを記載します。詳細は、「5.3.2 Java VMのヒープ領域サイズ/Perm領域サイズ」を参照してください。
なお、チューニングは開発フェーズ(システムテスト)で実施し、問題を解決してください。
また、チューニング方法には、上記に挙げたヒープ領域またはPerm領域を増加する方法の他に、IJServerクラスタのサーバーインスタンスを追加する方法もあります。