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

7.4.2 java.lang.OutOfMemoryErrorがスローされた場合

  本節では、OutOfMemoryErrorがスローされた場合、考えられる原因とその対処方法を説明します。

  なお、FJVMを使用でOutOfMemoryErrorがスローされた場合に出力されるメッセージ情報については、“メモリ領域不足事象発生時のメッセージ出力機能の強化”も参照してください。

想定される原因(メモリリーク)

  VMがガーベジコレクションを繰り返しても、時間の経緯とともにメモリ消費量が増大していく場合、プログラム中メモリリークを起こしている可能性があります。

メモリリークの結果、Javaのヒープ不足が発生しOutOfMemoryErrorがスローされる場合があります。

  この場合、ガーベジコレクションのログを採取して、Javaヒープの消費状況を確認してください。ガーベジコレクションのログを採取する方法は、“7.3.1 ガーベジコレクションのログ出力”を参照してください。

想定される原因(Javaヒープ不足)

  通常、OutOfMemoryErrorは、Javaヒープ不足が原因でスローされます。

  ガーベジコレクションのログを採取して、Javaヒープの消費状況を確認してください。
  Javaヒープの空き容量がないことが確認されたら、Javaヒープをチューニングしてください。

  ガーベジコレクションのログを採取する方法は、“7.3.1 ガーベジコレクションのログ出力”を参照してください。
  Javaヒープのチューニング方法は、“7.5.2 Javaヒープのチューニング”を参照してください。

想定される原因(ユーザ空間不足)

  多量のスレッドを生成して、多量のスタックがユーザ空間内に割り当てられ、ユーザ空間不足になった場合、次のOutOfMemoryErrorがスローされる、あるいはエラーメッセージとして表示を行いプロセスが終了します。

java.lang.OutOfMemoryError: unable to create new native thread

  また、JavaヒープやOSの仮想メモリに余裕があるにもかかわらず、ユーザ空間内にメモリを確保できなかった場合、次のOutOfMemoryErrorが出力されプログラムが終了します。

java.lang.OutOfMemoryError: requested サイズ bytes 制御名. Out of swap space?

サイズ:

確保できなかったメモリの大きさ

制御名:

メモリが確保できなかったJava VMの制御名(該当情報がある場合にだけ表示)

ユーザ空間が不足している場合は、Javaヒープまたはスタックのサイズを小さくするなどのチューニングを行ってください。
  スタックのサイズをチューニングする方法は、“7.5.1 スタックのチューニング”を参照してください。
  Javaヒープのチューニング方法は、“7.5.2 Javaヒープのチューニング”を参照してください。

  なお、仮想メモリに余裕がある場合は、Javaプロセスを複数起動して、プロセス多重度を上げる方法もあります。J2EEアプリケーションまたはJavaEEアプリケーションの場合、J2EEまたはJavaEEのチューニングを行ってください。J2EEまたはJavaEEのチューニング方法の詳細は、それぞれのマニュアルを参照してください。

想定される原因(仮想メモリ不足)

  仮想メモリが不足してスレッドが生成できない場合、次のOutOfMemoryErrorがスローされる、あるいはエラーメッセージとして表示を行いプロセスが終了します。

java.lang.OutOfMemoryError: unable to create new native thread

  また、OSの仮想メモリが不足した場合、次のOutOfMemoryErrorが出力されプログラムが終了します。

java.lang.OutOfMemoryError: requested サイズ bytes 制御名. Out of swap space?

サイズ:

確保できなかったメモリの大きさ

制御名:

メモリが確保できなかったJava VMの制御名(該当情報がある場合にだけ表示)

仮想メモリが不足した場合は、他の不要なプロセスを終了して仮想メモリに余裕を持たせるか、物理メモリ(RAM)またはスワップファイルを拡張して仮想メモリを増やすようにチューニングを行ってください。