Interstage Application Server/Interstage Web Server チューニングガイド
目次 索引 前ページ次ページ

第7章 JDK/JREのチューニング> 7.2 FJVM

7.2.5 メモリ領域不足事象発生時のメッセージ出力機能の強化

 FJVMでは、メモリ領域不足事象発生時に出力されるメッセージ情報の強化を行なっています。
 これによりFJVMでは、メモリ領域不足事象が発生した場合に、java.lang.OutOfMemoryErrorの例外メッセージ情報に加え、不足した領域の種別情報を図1の形式で出力します。

図1 メモリ領域不足事象が発生した場合に出力される不足した領域の種別情報

The memory was exhausted area_name
Java heap size / max Java heap size = heap_size / max_heap_size
Java perm size / max Java perm size = perm_size / max_perm_size

area_name:

メモリ領域不足事象が発生した領域の名前や領域不足となったオブジェクトの要求サイズ(不足領域情報)を表示します。
不足領域情報としては以下の項目があります。

  • on Java heap space. : requested <NNNN> bytes
    NNNNバイトのオブジェクト生成要求において、メモリ割り当てプール(New世代領域またはOld世代領域)に対してメモリ領域不足事象が発生した場合です。
    なお、JDK/JRE 5.0のエルゴノミクス機能によるメモリ領域不足事象の検出機能が有効な場合で、かつ当該機能によりメモリ領域不足事象を検出した場合、この項目になる場合があります。
  • on Java heap space. : requested <NNNN> bytes (in critical section)
    意味は「on Java heap space. : requested <NNNN> bytes」と同じですが、メモリ領域不足事象発生時、クリティカルセクション状態でGC処理の実行が抑止されていたことを示しています。
  • on Java perm space. : requested <NNNN> bytes
    NNNNバイトのオブジェクト生成要求において、Permanent世代領域に対してメモリ領域不足事象が発生した場合です。
    なお、JDK/JRE 5.0のエルゴノミクス機能によるメモリ領域不足事象の検出機能が有効な場合で、かつ当該機能によりメモリ領域不足事象を検出した場合、この項目になる場合があります。
  • on Java perm space. : requested <NNNN> bytes (in critical section)
    意味は「on Java perm space. : requested <NNNN> bytes」と同じですが、メモリ領域不足事象発生時、クリティカルセクション状態でGC処理の実行が抑止されていたことを示しています。
  • (なし)
    スタックやヒープなど、Javaヒープ以外の領域に対してメモリ領域不足事象が発生した場合です。特にjava.lang.OutOfMemoryErrorの例外メッセージ情報が“java.lang.OutOfMemoryErrorがスローされた場合"の「ユーザ空間不足」または「仮想メモリ不足」の場合に出力される形式の場合は、スタックやヒープなど、Javaヒープ以外の領域に対してメモリ領域不足事象が発生した場合と断定できます。
    またはJavaアプリケーション実行時における配列生成式の評価の段階で、配列オブジェクトの長さ(配列要素の数)から、当該配列オブジェクトを割り当てるための領域が十分でないと評価された場合(配列の長さ(配列要素の数)が大きすぎ、配列オブジェクトとしての大きさが2ギガバイト程度もしくはそれ以上の大きさになる配列の定義がある場合)。
    またはクラスのロード処理でメモリ不足が発生した場合。

heap_size:

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

max_heap_size:

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

perm_size:

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

max_perm_size:

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

 メモリ領域不足事象が発生した際に出力される各領域の使用中サイズ(heap_size、perm_size)には、メモリ領域不足の原因となったオブジェクトの大きさは含まれません。
 そのため巨大サイズのオブジェクト生成要求などによりメモリ領域不足事象が発生した場合には、「最大サイズ」と「使用中サイズ」の差が大きい場合(空き領域がたくさんあるように見える場合)がありますので注意してください。

 メモリ割り当てプールに対してメモリ領域不足事象が発生した場合に出力されるheap_sizeの値は、New世代領域での使用中サイズとOld世代領域での使用中サイズの合計値です。
 New世代領域とOld世代領域は別々のオブジェクト格納域として管理・制御されますから、max_heap_sizeとheap_sizeの差の大きさが、そのまま生成要求できるオブジェクトの最大サイズにはなりませんので注意してください。

図2 メモリ領域不足事象が発生した場合に出力されるメッセージ出力例

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
The memory was exhausted on Java heap space. : requested 4016 bytes
 Java heap size / max Java heap size = 495974032 / 536870912
 Java perm size / max Java perm size = 1678376 / 67108864

 図2の出力例の場合、4016バイトのオブジェクト生成要求において、メモリ割り当てプールに対してメモリ領域不足が発生したことを確認することができます。


目次 索引 前ページ次ページ

Copyright 2008 FUJITSU LIMITED