ページの先頭行へ戻る
Interstage Application Server/Interstage Web Server Express チューニングガイド
FUJITSU Software

8.6.2 EXTP4435メッセージまたはISJEE_OM1018メッセージが出力された場合

  Interstage Application Server配下のJavaアプリケーション実行時において、以下のメッセージが出力された場合は、メモリ領域不足事象が原因による異常となります。
Javaヒープをチューニングしてください。

  Javaヒープのチューニング方法は、“8.4.1 Javaヒープのチューニング”を参照してください。

各メッセージの内容については、“メッセージ集”を参照してください。
なお、IJServerのコンテナ情報ログ(info.log)およびIJServerクラスタのJava VMログ(jvm.log)に出力される「Java VMのヒープ域不足の詳細情報」の出力形式は、図1のとおりです。

1 Java VMのヒープ域不足の詳細情報の出力形式

------------------------------------------------------------------
OutOfMemory Log
------------------------------------------------------------------
pid=process_id
heap_type=heap_type_code
heap_size=heap_size
max_heap_size=max_heap_size
perm_size=perm_size
max_perm_size=max_perm_size
requested_size=requested_size
------------------------------------------------------------------
VM is terminated by occurred OutOfMemoryError on heap_type.
stack_trace

process_id:

メモリ領域不足事象が発生したJavaプロセスのプロセス番号。

heap_type_code:

メモリ領域不足事象が発生した領域に対応する番号です。表示される番号については、heap_typeの説明を参照してください。

heap_size:

メモリ領域不足事象が発生した際に使用中となっているメモリ割り当てプールのサイズ(単位:byte)。

max_heap_size:

利用可能なメモリ割り当てプールの最大サイズ(単位:byte)。

perm_size:

メモリ領域不足事象が発生した際に使用中となっているPermanent世代領域のサイズ(単位:byte)。

max_perm_size:

利用可能なPermanent世代領域の最大サイズ(単位:byte)。

requested_size:

領域不足となったオブジェクトの要求サイズ(単位:byte)。

heap_type:

不足領域情報(メモリ領域不足事象が発生した領域の名前など)を表示します。
不足領域情報としては以下の項目があります。

  • Java heap
    requested_sizeバイトのオブジェクト生成要求において、メモリ割り当てプール(New世代領域またはOld世代領域)に対してメモリ領域不足事象が発生した場合です。
    この項目のときのheap_type_codeは「1」になります。
    なお、JDK/JRE 6、7のエルゴノミクス機能によるメモリ領域不足事象の検出機能が有効な場合で、かつ当該機能によりメモリ領域不足事象を検出した場合、この項目になる場合があります。

  • Java heap in critical section
    意味はJava heapと同じですが、メモリ領域不足事象発生時、クリティカルセクション状態でGC処理の実行が抑止されていたことを示しています。

  • Java Perm
    requested_sizeバイトのオブジェクト生成要求において、Permanent世代領域に対してメモリ領域不足事象が発生した場合です。
    この項目のときのheap_type_codeは「2」になります。
    なお、JDK/JRE 6、7のエルゴノミクス機能によるメモリ領域不足事象の検出機能が有効な場合で、かつ当該機能によりメモリ領域不足事象を検出した場合、この項目になる場合があります。

  • Java Perm space in critical section
    意味はJava Permと同じですが、メモリ領域不足事象発生時、クリティカルセクション状態でGC処理の実行が抑止されていたことを示しています。

  • C heap 制御情報
    スタックやヒープなど、Javaヒープ以外の領域に対してメモリ領域不足事象が発生した場合(requested_sizeバイトのメモリ割り当て要求が失敗した場合)です。
    この項目のときのheap_type_codeは「0」になります。
    なお、現象発生時の要求サイズが不明な場合のrequested_sizeは「0」になります。
    また、次行に制御情報(メモリが確保できなかったJava VM制御の情報)が出力される場合があります。

  • unknown space
    Javaアプリケーション実行時における配列生成式の評価の段階で、配列オブジェクトの長さ(配列要素の数)から、当該配列オブジェクトを割り当てるための領域が十分でないと評価された場合(配列の長さ(配列要素の数)が大きすぎ、配列オブジェクトとしての大きさが2ギガバイト程度もしくはそれ以上の大きさになる配列の定義がある場合)。
    またはクラスのロード処理でメモリ不足が発生した場合。
    なお、JDK/JRE 6、7のエルゴノミクス機能によるメモリ領域不足事象の検出機能が有効な場合で、かつ当該機能によりメモリ領域不足事象を検出した場合、この項目になる場合があります。
    この項目のときのheap_type_codeは「-1」になります。
    なお、この項目の場合のrequested_sizeは「0」になります。

stack_trace:

メモリ領域不足事象が発生したスレッドがJavaアプリケーションを実行しているスレッドだった場合は、当該スレッドのスタックトレースが出力されます。それ以外のスレッドの場合、またはリソース不足によりスタック情報が取り出せない場合は、スタックトレースは出力されません。

  メモリ領域不足事象が発生した際に出力される各領域の使用中サイズ(heap_size、perm_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の差の大きさが、そのまま生成要求できるオブジェクトの最大サイズにはなりませんので注意してください。

2 Java VMのヒープ域不足の詳細情報の出力例

--------------------------------------------------------------------------------
OutOfMemory Log
--------------------------------------------------------------------------------
pid=4696
heap_type=1
heap_size=136800
max_heap_size=6291456
perm_size=2052320
max_perm_size=67108864
requested_size=40000016
--------------------------------------------------------------------------------
VM is terminated by occurred OutOfMemoryError on Java heap.
"main" prio=6 tid=0x00307000 nid=0x12a8 runnable [0x0092f000]
   java.lang.Thread.State: RUNNABLE
         at test.<init>(test.java:10)
         at test.main(test.java:5)

  JDK/JRE 6からスタックトレース情報にスレッドの状態を表す情報(トレース情報の前の行)が表示されるようになりました。

  図中の例では「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"などの表示の場合があります。