java.lang.OutOfMemoryError: PermGen space及びJava PermGenについて
2011/12/07 13:26Update
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オプション
※設定例::-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
※Tomcatの設定例:
TOMCAT_HOME/bin/catalina.sh
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領域最大使用量
-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
Sponsored Link
Comments
- Relative Articles
- Java OutOfMemoryError対策 - (2009/04/14 16:23)