我需要帮助解决这个问题。我需要有人向我解释为什么会发生这种情况以及如何防止或避免它。
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.
答案 0 :(得分:20)
PermGen是JVM内存的一个区域,用于加载类。
当应用程序执行时,它会使用越来越多的内存,特别是如果你在调试环境中,如果你大量使用闭包。
解决此问题的方法是添加更多内容!
这是通过在启动应用程序时将一个或两个参数传递给JVM来完成的。
参数是:
-XX:MaxPermSize=256m
-XX:PermSize=128m
(根据您的具体需求调整值)
PermSize将是PermGen的初始大小,而MaxPermSize将是在你向帖子抛出异常之前它将增加的最大大小。
默认情况下,它设置为64M
,如果你有一个“真正的”应用程序,那就不多了。
请注意:您的total memory usage
将是:Heap size + Perm Size
答案 1 :(得分:1)
如果您使用的是Servlet 3.0版,那么即使增加内存也没有任何帮助,因为它是groovy编译器的问题。即将发布的新版本1.8.2 / 1.9(?)将解决此问题。在此期间,您可以将servlet版本更改回“2.5”(在BuildConfig.groovy中),这将解决此问题。
将servlet版本更改为2.5的缺点是它无法部署到Glassfish应用程序服务器,因此丑陋的变通方法更改为2.5并使用“run-app”。当你想部署到glassfish时,在BuildConfig.groovy中将servlet版本更改为“3.0”,运行“war”,然后将战争部署到Glassfish。 将其更改回“2.5”以再次在本地开发机器上运行。
答案 2 :(得分:0)
查看常见问题解答
自Grails 0.6以来,Grails自动重新编译Java源代码 使用预编译然后重新启动服务器的域类。这个 如果服务器运行很长时间,会导致permgen空间耗尽 时间和许多变化。如果是,您可以禁用此功能 对你不重要:
grails -Ddisable.auto.recompile = true run-app
在Windows上,Grails 0.6也存在问题 OutOfMemoryErrors在开发模式期间的活动期间到期 重新编译。这可以在SVN头中解决,但如果你看到了 这个问题上面的选项也可以帮助。
最简单的方法是在应用程序服务器发生时重新启动它。
答案 3 :(得分:0)