4

この問題について助けが必要です。なぜこれが起こっているのか、そしてそれを防ぐまたは回避する方法を説明してくれる人が必要です。

Exception in thread "Thread-747" java.lang.OutOfMemoryError: PermGen space
Exception in thread "Thread-748" java.lang.OutOfMemoryError: PermGen space
Exception in thread "Thread-759" java.lang.OutOfMemoryError: PermGen space
Exception in thread "Thread-760" java.lang.OutOfMemoryError: PermGen space
Exception in thread "Thread-764" java.lang.OutOfMemoryError: PermGen space
Exception in thread "Thread-765" java.lang.OutOfMemoryError: PermGen space
Exception in thread "Thread-766" java.lang.OutOfMemoryError: PermGen space
Exception in thread "Thread-767" java.lang.OutOfMemoryError: PermGen space
Exception in thread "Thread-773" java.lang.OutOfMemoryError: PermGen space
Exception in thread "Thread-774" java.lang.OutOfMemoryError: PermGen space
Exception in thread "Thread-780" java.lang.OutOfMemoryError: PermGen space
Exception in thread "Thread-781" java.lang.OutOfMemoryError: PermGen space
Exception in thread "Thread-788" java.lang.OutOfMemoryError: PermGen space
Exception in thread "Thread-789" java.lang.OutOfMemoryError: PermGen space
2011-06-20 14:42:10,668 [http-8080-6] ERROR [/CM].[grails]  - Servlet.service() for servlet grails threw exception
java.lang.OutOfMemoryError: PermGen space
2011-06-20 14:42:10,668 [http-8080-6] ERROR [/CM].[default]  - Servlet.service() for servlet default threw exception
java.lang.OutOfMemoryError: PermGen space
: java.lang.OutOfMemoryError: PermGen space
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:116)
        at _GrailsPackage_groovy$_run_closure8.doCall(_GrailsPackage_groovy:275)
        at _GrailsPackage_groovy$_run_closure8.call(_GrailsPackage_groovy)
        at _GrailsRun_groovy$_run_closure8.doCall(_GrailsRun_groovy:245)
        at RunApp$_run_closure1.doCall(RunApp.groovy:35)
        at gant.Gant$_dispatch_closure5.doCall(Gant.groovy:381)
        at gant.Gant$_dispatch_closure7.doCall(Gant.groovy:415)
        at gant.Gant$_dispatch_closure7.doCall(Gant.groovy)
        at gant.Gant.withBuildListeners(Gant.groovy:427)
        at gant.Gant.this$2$withBuildListeners(Gant.groovy)
        at gant.Gant$this$2$withBuildListeners.callCurrent(Unknown Source)
        at gant.Gant.dispatch(Gant.groovy:415)
        at gant.Gant.this$2$dispatch(Gant.groovy)
        at gant.Gant.invokeMethod(Gant.groovy)
        at gant.Gant.executeTargets(Gant.groovy:590)
        at gant.Gant.executeTargets(Gant.groovy:589)
Caused by: java.lang.OutOfMemoryError: PermGen space
--- Nested Exception ---
java.lang.OutOfMemoryError: PermGen space
Error automatically restarting container: java.lang.OutOfMemoryError: PermGen space
Error executing script RunApp: PermGen space
java.lang.OutOfMemoryError: PermGen space
Error executing script RunApp: PermGen space
Application context shutting down...
Application context shutdown.
4

4 に答える 4

20

PermGenは、クラスのロードに使用されるJVMのメモリの領域です。

アプリケーションを実行すると、特にデバッグ環境にいる場合や、クロージャを多用する場合に、このメモリをますます使用します。

これを修正する方法は、さらに追加することです。

これは、アプリケーションの起動時に1つまたは2つのパラメーターをJVMに渡すことによって行われます。

パラメータは次のとおりです。

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

(特定のニーズに合わせて値を調整します)

PermSizeはPermGenの初期サイズになり、MaxPermSizeは、投稿のように例外をスローする前に増加する最大サイズになります。

デフォルトでは、に設定されて64Mいますが、「実際の」アプリケーションがある場合はそれほど多くありません。

注意を払う:あなたは次のtotal memory usageようになります:Heap size + Perm Size

于 2011-06-21T03:28:49.347 に答える
1

サーブレット バージョン 3.0 を使用している場合は、メモリを増やしても、groovy コンパイラの問題であるため、何の役にも立ちません。まもなくリリースされる新しいバージョン 1.8.2/1.9 (?) では、この問題が解決されます。それまでの間、サーブレットのバージョンを (BuildConfig.groovy で) 「2.5」に戻すと、この問題が解決されます。

サーブレットのバージョンを 2.5 に変更することの欠点は、Glassfish アプリケーション サーバーにデプロイできないことです。そのため、醜い回避策は 2.5 に変更して「run-app」を使用することです。Glassfish にデプロイする場合は、BuildConfig.groovy でサーブレットのバージョンを「3.0」に変更し、「war」を実行してから war を Glassfish にデプロイします。「2.5」に戻して、ローカル開発マシンで再度実行します。

于 2011-09-06T01:43:41.617 に答える
0

STS IDE で次のように設定します。

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

ここに画像の説明を入力

お役に立てば幸いです。

于 2015-09-03T18:44:45.257 に答える
0

よくある質問を確認する

Q: OMG Grails を開発モードで実行すると、OutOfMemoryErrors または PermGen Space エラーが発生します。私は何をしますか?

Grails 0.6 以降、Grails はプリコンパイルを使用して Java ソースとドメイン クラスを自動的に再コンパイルし、その後サーバーを再起動します。これにより、サーバーが長時間実行され、多くの変更が加えられた場合、permgen スペースが不足する可能性があります。重要でない場合は、次の方法でこの機能を無効にすることができます。

grails -Ddisable.auto.recompile=true アプリの実行

Windows 上の Grails 0.6 にも問題があり、再コンパイルが原因で、開発モードでのアクティビティ期間中に OutOfMemoryErrors が発生します。これは SVN ヘッドで解決される可能性がありますが、この問題が発生した場合は、上記のオプションも役立ちます。

問題が発生したときにアプリケーション サーバーを再起動するのが最も簡単です。

于 2011-06-20T13:53:10.607 に答える