如何使用免费工具查找classloader泄漏?

时间:2014-02-23 09:16:11

标签: java spring hibernate tomcat memory-leaks

我正在调查Tomcat / Spring / Hibernate应用程序中的内存泄漏,这会导致在几次重新部署后导致可怕的“out of permgen”错误。我已经下载了plumbr的免费版本,这证实我有一个classloader泄漏,但遗憾的是我无法负担499美元的详细报告。是否有免费工具可以执行等效分析并告诉我在哪里寻找它?或者我可以调查这些泄漏的其他常见原因?

到目前为止我采取的步骤:

  • 确保我的JDBC驱动程序在上下文关闭时未注册
  • 手动关闭MySQL驱动程序的AbandonedConnectionCleanupThread(Tomcat Guice/JDBC Memory Leak

还有什么可能导致泄漏?

2 个答案:

答案 0 :(得分:5)

您可以使用evaluation version of JProfiler来调查类加载器泄漏。转到类加载器探针,选择一个泄漏的类加载器并在堆栈中显示它们,您可以在其中研究对类加载器加载的类的强引用。

有一个screen cast可以告诉您如何执行此操作。

免责声明:我公司开发JProfiler。

答案 1 :(得分:4)

我发现Eclipse的内存分析工具工作得相当好。我将我的服务器设置为生成堆转储并使用MAT(大致遵循指南here)来查找所有类加载器。似乎相关的是org.apache.catalina.loader.WebappClassLoader,通过列出他们的GC根源,我很容易发现我的问题是由java.util.logging.Level引起的,org.jboss.logging.JDKLevel是通过{{1}}间接引用的。 / p>

现在我只需要弄清楚如何防止JBoss Logging这样做......

相关问题