web-dev-qa-db-ja.com

NetbeansでPermGenスペースエラーを防ぐにはどうすればよいですか?

Netbeansは15〜30分ごとに「Java.lang.OutOfMemoryError: PermGen space "。Googleから学んだことから、これは一般的にクラスローダーのリークまたはメモリリークに関連しているようです。

残念ながら、私が見つけた提案はすべてアプリケーションサーバーに関連しており、それらをNetbeansに適応させる考えはありません。 (同じ問題かどうかさえわかりません)

それは私のアプリケーションの問題ですか?ソースを見つけるにはどうすればよいですか?

27
Daniel Rikowski

これは、一定のクラスローディングのためです。

Javaは、クラスのバイトコードとすべての定数(文字列定数など)を、デフォルトでガベージコレクションされない永続ヒープに格納します(クラスはアプリケーションの存続期間中に1回だけロードされるため、ほとんどの状況で意味があります)。

存続期間全体でクラスをロードすることが多いアプリケーションでは、次のとおりです。

  • ホット再デプロイ中のWebサーバーとアプリケーションサーバー。
  • 開発されたアプリケーションを実行するときのIDE(NetbeansまたはEclipseで[実行]ボタンを押すたびに、アプリケーションのクラスが新しく読み込まれます)。
  • など、ヒープが最終的にいっぱいになるため、この動作は不適切です。

このエラーを防ぐには、永続的なヒープガベージコレクションをオンにする必要があります。

オプションを使用します

-XX:MaxPermSize=256M
-XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled

(私のEclipse 3.4が "Java.lang.OutOfMemoryError: PermGen space"をスローしないようにしたので、netbeansでも動作するはずです)。

編集:Netbeansの場合、これらのオプションを次のように設定することに注意してください:[Netbeans installation]\etc\netbeans.confこれらのオプションの前に-Jを付け、netbeans_default_optionsに追加する必要があります(詳細については、netbeans.confのコメントを参照してください)。

32
Łukasz Bownik

次の引数をne​​tbeans netconfに追加してみてください:-J-XX:MaxPermSize = 256m

4
jassuncao

Webアプリケーションを開発している場合は、サーバーのVMオプションを設定してみてください

-Xmx512m -Xms512m -XX:MaxPermSize = 512m

ツール/サーバー//プラットフォーム/ VMオプション(Netbeans 7.4)に移動します

2
shereifhawary

PermSizeのサイズを設定する方法については、この link を参照してください。ほとんどの場合、これはコードの問題ではないため、唯一の解決策はPermSizeを増やすことです。 JAXBを使用する場合、これはかなり頻繁に発生することがわかりました。一般に、それ自体が他の多くのjarファイルにも依存する多くのライブラリを使用する場合、PermGenスペースのデフォルトサイズは十分に大きくない場合があります。

詳細については、次のブログ投稿を参照してください。 クラスローダーリーク および 恐ろしい「Java.lang.OutOfMemoryError:PermGenスペース」を修正する方法

2
kgiannakakis

ファイル/etc/netbeans.confを編集することにより、netbeansJVMの起動オプションを変更できます。 Webappを開発し、それを頻繁に展開するときに、この種のエラーが発生することがよくあります。その場合、Tomcatを時々再起動します。

1
Maurice Perry