java.lang.OutOfMemoryError: PermGen space及びJava PermGenについて

2011/12/07 13:26Update
TAGS: OutOfMemoryError | PermGen | Permanent | メモリ不足 | GC | Java | MaxPermSize

java.lang.OutOfMemoryError: Java heap spaceエラーの原因及びその解決策について。

java.lang.OutOfMemoryError: Java heap spaceエラーについて、次の記事にて解説しましたが、
Java OutOfMemoryError対策

今回は、java.lang.OutOfMemoryError: PermGen space について、続きたいと思います。


java.lang.OutOfMemoryError: PermGen spaceを発生する原因
PermGen space(Permanent Generation space):Javaクラスとそのメタ情報が格納されるメモリ領域のことです。
クラスはロードされる時点でPermGen spaceに保存されます。
クラスのインスタンスを格納するヒープ領域と違って、GCはPermGen spaceに保存された情報を回収しません。
そのため、たくさんのクラスがアプリにロードされる場合、PermGen spaceサイズを超えてしまうと、「java.lang.OutOfMemoryError: PermGen space」を発生します。

即ち、java.lang.OutOfMemoryError: PermGen spaceを発生する原因は
1)JVMにロードされるクラスは多すぎる
2)PermGen spaceサイズは小さすぎる
などが考えられます。

解決方法
1)できるだけロードするクラス(ダイナミック生成されるクラスも含む)を減らす
 ※Tomcatの場合、共有できるjarファイルを$TOMCAT_HOME/shared/libに移動することも一つの手です。

2)PermGen spaceサイズを大きくにする:MaxPermSizeオプション
-XX:PermSize → Permanent領域初期使用量
-XX:MaxPermSize → Permanent領域最大使用量

 ※設定例::-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
 ※Tomcatの設定例:
TOMCAT_HOME/bin/catalina.sh
JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m

有关作者
Syboos.jp編集長AJavaやオープンソース情報の執筆、Webサイトの開発や運営全般の業務に携わる。

Sponsored Link


Comments

用户名 (required)

Email (will not be published) (required)

URL

Evaluation

  • Relative Articles