Java Grails/Groovy内存泄漏故障排除?

Java Grails/Groovy内存泄漏故障排除?,java,grails,groovy,jvm,Java,Grails,Groovy,Jvm,我有一个Grails应用程序,它可以创建和销毁相当多的域对象,而且它似乎以非常非常快的速度耗尽了PermGen空间。我已经做了通常的调整(将PermGen提升到256M,启用了类GC等等),但没有骰子 有人愿意推荐一些(希望是免费的或非常低成本的)工具来解决Groovy和/或Java中的这种内存消耗问题吗?或者您用来解决JVM内存问题的一些技术 编辑:当应用程序以生产模式部署在Tomcat内部时;我没有试过用其他容器。即便如此,拥有一些资源来追踪问题还是很好的。是一个很好的工具,我曾多次使用它来

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

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


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

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

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

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

?

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


您还可以尝试JVM的另一种实现,比如Oracle的JRockit,它应该在垃圾收集和其他效率方面做得更好。我从来没有尝试过,但由于我也在开发和广泛的GRAILS项目的中间,我可能是购物解决这些问题我自己。祝你好运

是一个免费工具,至少和你的工具包一样好

我个人喜欢。确实有更强大的工具,但这一个具有很好的可用性与功耗比。

如果在多次热重新部署应用程序后出现这种情况,您可能会受到影响。也有几种可能导致永久发电机泄漏的原因。

您试过了吗

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled
?

再加上增加了常见的可疑对象(
-Xmx
-Xms
-XX:PermSize
-XX:MaxPermSize
),这解决了我们生产的Tomcat上的所有PermGen问题,这些问题在部署应用程序后不久就发生了。此后再也没有见过其他OOM异常。:-)

这也很有用:

JRockit是一款Oracle产品,我在Tomcat(6.0.18)上以生产模式运行,对JVM没有选择余地。我已经了解到,Web容器中的垃圾收集问题之一是,只有在容器重新启动时,堆栈才会真正刷新。(重新启动容器相当于重新启动Tomcat服务,而不是简单地重新启动单个Web应用程序。)我实际上认为这是根本问题(该应用程序在Jetty中运行良好),但即使如此,我还是希望有一个很好的资源来进行此类调试。此解决方案有任何与性能相关的问题吗?我们正在使用可搜索、可审核和石英插件进行大量重复性工作,每周都有一个永久性的OOM…您是如何解决您的问题的?我们使用searchable和quartz(以及其他插件),几乎每一个请求都会增加PERMGEN空间的使用量。