JBossの質問-java.lang.OutOfMemoryError: PermGen space
1184 ワード
最近、JBossでプロジェクトを展開して実行すると、javaがWebページに報告されるという問題が発生しました.lang.OutOfMemoryError: PermGen space
インターネットで資料を検索したところ、PermGen spaceのメモリ不足が原因であることがわかりました.
原因を分析する
1、 java.lang.OutOfMemoryError:PermGen spaceは、PermGen spaceのメモリ容量不足によるメモリオーバーフローエラーが文字通り見られます.
2、PermGen spaceのフルネームはPermanent Generation spaceで、メモリの永久保存領域を指す.この部分はClassとMetaの情報を格納するために使用され、ClassはLoadされたときにPermGen spaceエリアに格納されます.Instanceを格納するHeapエリアとは異なり、GC(Garbage Collection)はメインプログラムの実行期間中にPermGen spaceをクリーンアップすることはありません.したがって、あなたのアプリがLoadの多くのClassを格納する場合、PermGen spaceエラーが発生する可能性が高いです.このエラーは、WebサーバがJSPに対してpre compileを行う場合によく発生します.
解決方法:
プロジェクトで多くのjarパケットが参照されている場合、これらのjarパケットのClass情報はJBossのClass LoaderによってPermGen space領域にロードされますが、JVMのデフォルトでは、この部分の空間の大きさは4 Mしかありません.jarパケットが非常に多い場合、明らかに不十分です.ただし、-XX:MaxPermSize=256 mで最大値を指定することで問題を解決できます.
CentOS 6.3での解決手順(他のシステムと同様):
-X:PermSize=256 m-XX:MaxPermSize=512 mの2つの内容で、結果は以下の通りです.
JAVA_OPTS="-Xms256m -Xmx512m -XX:PermSize=256m -XX:MaxPermSize=512m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"
インターネットで資料を検索したところ、PermGen spaceのメモリ不足が原因であることがわかりました.
原因を分析する
1、 java.lang.OutOfMemoryError:PermGen spaceは、PermGen spaceのメモリ容量不足によるメモリオーバーフローエラーが文字通り見られます.
2、PermGen spaceのフルネームはPermanent Generation spaceで、メモリの永久保存領域を指す.この部分はClassとMetaの情報を格納するために使用され、ClassはLoadされたときにPermGen spaceエリアに格納されます.Instanceを格納するHeapエリアとは異なり、GC(Garbage Collection)はメインプログラムの実行期間中にPermGen spaceをクリーンアップすることはありません.したがって、あなたのアプリがLoadの多くのClassを格納する場合、PermGen spaceエラーが発生する可能性が高いです.このエラーは、WebサーバがJSPに対してpre compileを行う場合によく発生します.
解決方法:
プロジェクトで多くのjarパケットが参照されている場合、これらのjarパケットのClass情報はJBossのClass LoaderによってPermGen space領域にロードされますが、JVMのデフォルトでは、この部分の空間の大きさは4 Mしかありません.jarパケットが非常に多い場合、明らかに不十分です.ただし、-XX:MaxPermSize=256 mで最大値を指定することで問題を解決できます.
CentOS 6.3での解決手順(他のシステムと同様):
#cd /usr/local/jboss/bin
#vim run.conf
runを修正する.confのJAVA_OPTS,増加-X:PermSize=256 m-XX:MaxPermSize=512 mの2つの内容で、結果は以下の通りです.
JAVA_OPTS="-Xms256m -Xmx512m -XX:PermSize=256m -XX:MaxPermSize=512m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"