我正在调查Tomcat / Spring / Hibernate应用程序中的内存泄漏,这会导致在几次重新部署后导致可怕的“out of permgen”错误。我已经下载了plumbr的免费版本,这证实我有一个classloader泄漏,但遗憾的是我无法负担499美元的详细报告。是否有免费工具可以执行等效分析并告诉我在哪里寻找它?或者我可以调查这些泄漏的其他常见原因?
到目前为止我采取的步骤:
还有什么可能导致泄漏?
答案 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这样做......