Tomcat 6 Web应用程序随着时间的推移吃掉内存

时间:2011-09-09 20:43:17

标签: java memory grails monitoring tomcat6

我有一个部署在Tomcat 6服务器上的Grails应用程序。应用程序可以运行一段时间(一天或两天),但随着时间的推移慢慢消耗越来越多的内存,直到它停止运行然后超过最大值。一旦我重新启动容器,一切都很好。我一直在使用grails JavaMelody插件以及Application Info插件验证这一点,但我需要帮助来确定我应该寻找什么。

这听起来像应用程序泄漏,但据我所知,无法访问任何非托管资源。此外,Hibernate缓存似乎正在检查中。看起来如果我运行垃圾收集器,我得到了相当大的内存,但我不知道如何以可持续的方式做到这一点。

所以:

  • 如何使用这些(或其他)监控工具找出问题所在?
  • 还有其他建议可以帮助我吗?

非常感谢。

修改

我正在使用Grails 1.3.7并且我正在使用Quartz插件。

2 个答案:

答案 0 :(得分:2)

您可以使用Oracle JDK中的VisualVM应用程序在运行时附加到Tomcat实例(如果已使用Oracle JVM)以检查发生了什么。内存分析器可以告诉你很多,并指出你正确的方向。您很可能会寻找增长的对象或分配越来越多的对象类型。

如果您需要的不仅仅是免费的VisualVM应用程序可以告诉您,商业分析器可能会有用。

答案 1 :(得分:1)

根据您对Quartz的使用情况,它可能与持久性和线程局部的a know memory leak with the Quartz plugin直接相关。您可能需要仔细检查并查看这是否适用于您的情况。