Grails / Groovy内存泄漏疑难解答?

时间:2009-04-03 00:50:53

标签: java grails groovy jvm

我有一个Grails应用程序可以完成相当不错的域对象创建和破坏,并且它似乎以非常非常快的速度耗尽了PermGen空间。我做了通常的调整(将PermGen提升到256M,启用了类GC等),但没有骰子。

是否有人愿意推荐一些(希望免费或非常低成本)工具来解决Groovy和/或Java中的这种内存消耗问题?或者您用来解决JVM内存问题的一些技术?

编辑:这是在生产模式下在Tomcat内部署应用程序的时间;我没试过其他容器。即便如此,有一些资源可以追踪问题。

7 个答案:

答案 0 :(得分:10)

你试过吗

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled

与增加通常的嫌疑人(-Xmx-Xms-XX:PermSize-XX:MaxPermSize)一起解决了我们生产Tomcat的所有PermGen问题,这些问题很快就出现了部署应用程序后。之后再也没见过另一个OOM-Exception。 : - )

答案 1 :(得分:6)

我个人喜欢VisualVM。肯定有更强大的工具,但是这个工具具有很好的可用性 - 功率比。

答案 2 :(得分:3)

答案 3 :(得分:2)

Eclipse Memory Analyzer是一个免费工具,至少和Yourkit一样好。

答案 4 :(得分:1)

YourKit是一个很好的工具,我多次使用它来诊断内存问题。它是商业性的,但它有一个免费的评估版本可用于一次性调试。

答案 5 :(得分:1)

您在开发或生产中遇到的问题是什么?

如果您正在开发中,请记住Grails不断重新编译应用程序的许多方面(不仅是域更改,还包括控制器更改,以及其他类)。我也有PermGen问题,但大多数是由我正在处理的文件的稳定重新编译触发的。您可以关闭此功能

http://www.grails.org/FAQ#Q:%20OMG%20I%20get%20OutOfMemoryErrors%20or%20PermGen%20Space%20errors%20when%20running%20Grails%20in%20development%20mode.%20What%20do%20I%20do

如果你正在制作,那么显然你有一个更严重的问题。 PermGen内存问题归因于构建Grails的许多框架,包括Spring,Hibernate,甚至是Sun自己的JVM。您可以尝试调整Web容器(Tomcat或Jetty)的最大堆大小。

你也可以尝试不同的JVM实现,比如Oracle的JRockit,它应该在垃圾收集和其他效率方面更好。我自己从未尝试过,但由于我也处于开发和广泛的Grails项目的中间,我可能会自己购买这些问题的解决方案。祝你好运!

答案 6 :(得分:0)

如果在多次热重新部署应用程序后发生这种情况,您可能会受到this Grails bug的影响。 Tomcat FAQ也有几种可能导致PermGen泄漏的原因。