如何使用免费工具查找类加载器泄漏?

2022-09-04 22:08:35

我正在调查Tomcat / Spring / Hibernate应用程序中的内存泄漏,该漏洞在经过几次重新部署后导致可怕的“out of permgen”错误。我已经下载了免费版本的plumbr,它确认我有一个类加载器泄漏,但不幸的是,我负担不起499美元来获得详细的报告。有没有一个免费的工具可以执行等效的分析,并告诉我在哪里寻找它?或者我可以调查的此类泄漏的其他一些常见原因?

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

  • 确保我的 JDBC 驱动程序在上下文关闭时已取消注册
  • 手动关闭MySQL驱动程序的被遗弃的ConnectionCleanupThread(根据Tomcat Guice / JDBC内存泄漏))

还有什么可能导致泄漏?


答案 1

您可以使用 JProfiler 的评估版本来调查类装入器泄漏。转到类装入器探测器,选择一个泄漏的类装入器,并在堆查看器中显示它们,您可以在其中调查对类装入器装入的类的强引用。

有一个屏幕投射向您展示如何执行此操作。

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


答案 2

我发现Eclipse的内存分析工具运行得相当不错。我将服务器设置为生成堆转储,并使用 MAT(大致按照此处的指南)查找所有类加载器。似乎相关的是,通过列出他们的GC根,我很容易发现我的问题是由通过间接引用的。org.apache.catalina.loader.WebappClassLoaderjava.util.logging.Levelorg.jboss.logging.JDKLevel

现在我只需要弄清楚如何防止JBoss日志记录这样做...


推荐