メモリは足りているのに“OutOfMemory”

Javaアプリケーションを動作させていて、「OutOfMemoryが出た」「Java VMが落ちた」という問い合わせを受けることがある。この場合、たいていはアプリケーションの問題や、設定の問題であることが多い。本稿では、HP-UX上でのJava VMを例に、OutOfMemoryが出る原因とその対処方法を紹介する。なお、本稿に登場する用語は第6回「APサーバからの応答がなくなった〓GCをチューニングしよう〓」で解説しているので、参照してから読んでほしい。

OutOfMemoryになる典型的なケースは

  • Old領域が足りない
  • Java VMのParmanent領域が足りない
  • カーネルパラメータが小さすぎる
  • カーネルパラメータが足りない
  • ほかのプロセスが起動できない
  • EXEC_MAGICで使えるPrivate領域を使い果たした

Java VMのParmanent領域が足りない

サーバーサイドプログラミングでは結構ありがちらしい。メモリーデバッガなどで確認して適当なサイズを割り当てる。

割り当て方法

環境変数JAVA_OPTSやCATALINA_OPTSで下記の書式で記述する。

 -XX:PermSize=<初期値> -XX:MaxPermSize=<最大値>


サイズ指定の例

 -XX:PermSize=64m -XX:MaxPermSize=128m