Interstage Application Server配下のJavaアプリケーション実行時において、以下のメッセージが出力された場合は、メモリ領域不足事象が原因による異常となります。
Javaヒープおよびメタスペースをチューニングしてください。
Javaヒープおよびメタスペースのチューニング方法は、“10.4.1 Javaヒープおよびメタスペースのチューニング”を参照してください。
EXTP4435メッセージ
PCMI1105メッセージ
参照
各メッセージの内容については、“メッセージ集”を参照してください。
なお、IJServerのコンテナ情報ログ(info.log)およびIJServerクラスタのJava VMログ(console.log)に出力される「Java VMのヒープ域不足の詳細情報」の出力形式は、以下のとおりです。
Java VMのヒープ域不足の詳細情報の出力形式
------------------------------------------------------------------ |
メモリ領域不足事象が発生したJavaプロセスのプロセス番号。
メモリ領域不足事象が発生した領域に対応する番号です。表示される番号については、heap_typeの説明を参照してください。
メモリ領域不足事象が発生した際に使用中となっているメモリ割り当てプールのサイズ(単位:byte)。
利用可能なメモリ割り当てプールの最大サイズ(単位:byte)。
メモリ領域不足事象が発生した際に使用中となっているメタスペースのサイズ(単位:byte)。
利用可能なメタスペースの最大サイズ(単位:byte)。
領域不足となったオブジェクトの要求サイズ(単位:byte)。
不足領域情報(メモリ領域不足事象が発生した領域の名前など)を表示します。
不足領域情報としては以下の項目があります。
Java heap
requested_sizeバイトのオブジェクト生成要求において、メモリ割り当てプール(New世代領域またはOld世代領域)に対してメモリ領域不足事象が発生した場合です。
この項目のときのheap_type_codeは「1」になります。
なお、エルゴノミクス機能によるメモリ領域不足事象の検出機能が有効な場合で、かつ当該機能によりメモリ領域不足事象を検出した場合、この項目になる場合があります。
Java heap in critical section
意味は「Java heap」と同じですが、メモリ領域不足事象発生時、クリティカルセクション状態でGC処理の実行が抑止されていたことを示しています。
Metaspace
requested_sizeバイトのオブジェクト生成要求において、メタスペースに対してメモリ領域不足事象が発生した場合です。
この項目のときのheap_type_codeは「2」になります。
Metaspace in critical section
意味は「Metaspace」と同じですが、メモリ領域不足事象発生時、クリティカルセクション状態でGC処理の実行が抑止されていたことを示しています。
C heap 制御情報
スタックやヒープなど、Javaヒープ以外の領域に対してメモリ領域不足事象が発生した場合(requested_sizeバイトのメモリ割り当て要求が失敗した場合)です。
この項目のときのheap_type_codeは「0」になります。
なお、現象発生時の要求サイズが不明な場合のrequested_sizeは「0」になります。
また、次行に制御情報(メモリが確保できなかったJava VM制御の情報)が出力される場合があります。
unknown space
Javaアプリケーション実行時における配列生成式の評価の段階で、配列オブジェクトの長さ(配列要素の数)から、当該配列オブジェクトを割り当てるための領域が十分でないと評価された場合(配列の長さ(配列要素の数)が大きすぎ、配列オブジェクトとしての大きさが2ギガバイト程度もしくはそれ以上の大きさになる配列の定義がある場合)。
またはクラスのロード処理でメモリ不足が発生した場合。
なお、エルゴノミクス機能によるメモリ領域不足事象の検出機能が有効な場合で、かつ当該機能によりメモリ領域不足事象を検出した場合、この項目になる場合があります。
この項目のときのheap_type_codeは「-1」になります。
なお、この項目の場合のrequested_sizeは「0」になります。
メモリ領域不足事象が発生したスレッドがJavaアプリケーションを実行しているスレッドだった場合は、当該スレッドのスタックトレースが出力されます。それ以外のスレッドの場合、またはリソース不足によりスタック情報が取り出せない場合は、スタックトレースは出力されません。
注意
メモリ領域不足事象が発生した際に出力される各領域の使用中サイズ(heap_size、metaspace_size)には、メモリ領域不足の原因となったオブジェクトの大きさは含まれません。
そのため巨大サイズのオブジェクト生成要求などによりメモリ領域不足事象が発生した場合には、「最大サイズ」と「使用中サイズ」の差が大きい場合(空き領域がたくさんあるように見える場合)がありますので注意してください。
注意
NewGC処理では、New世代領域を「eden space」、「from space」および「to space」の3つの内部領域に細分割し、当該領域上において、一般に世代別GC制御と言われる制御方法を用いて、Javaアプリケーションが生成要求したオブジェクトを管理・制御しています。
このうち、「from space」および「to space」は、Java VMがNewGC処理を行う際の作業域的な役割を持つ領域となっています。そのため、「from space」および「to space」の各領域が占める大きさのうち、Javaアプリケーションからのオブジェクト生成要求のために使用される大きさは、その領域の一部分だけとなります。
そのため、出力データにおいて、メモリ割り当てプールやNew世代領域に空きがあるように見える場合であっても、実際には空きがない場合がありますので注意してください(空きがあるように見える場合であっても、その差は、NewGC処理用の作業域的な役割で使用済となっている場合があります)。
注意
メモリ割り当てプールに対してメモリ領域不足事象が発生した場合に出力されるheap_sizeの値は、New世代領域での使用中サイズとOld世代領域での使用中サイズの合計値です。
New世代領域とOld世代領域は別々のオブジェクト格納域として管理・制御されますから、max_heap_sizeとheap_sizeの差の大きさが、そのまま生成要求できるオブジェクトの最大サイズにはなりませんので注意してください。
例
Java VMのヒープ域不足の詳細情報の出力例
スタックトレース情報にスレッドの状態を表す情報(トレース情報の前の行)が表示されます。
-------------------------------------------------------------------------------- |
「java.lang.Thread.State: RUNNABLE」となっていますが、"RUNNABLE"の部分が、"NEW"、"TIMED_WAITING (sleeping)"、"WAITING (on object monitor)"、"TIMED_WAITING (on object monitor)"、"WAITING (parking)"、"TIMED_WAITING (parking)"、"BLOCKED (on object monitor)"、"TERMINATED"、"UNKNOWN"などの表示の場合があります。