我需要帮助使用MAT找到我的内存泄漏

时间:2011-07-27 16:04:11

标签: java memory-leaks

我正在使用MAT来比较两个堆转储。我每天都在堆垃圾堆,每天增加约200兆。我认为泄漏与java.util.zip相关,因为该表显示了什么,也因为我们最近添加了一个新的进程来拉链和解压缩大量文件。 (见图)

Heap dump histogram compare

此时我打开了支配者并过滤了。 Inflater 。这产生了一个庞大的java.util.zip.Inflater列表。现在我想看看是什么让这些打开,所以我选择了一个并运行GC根路径,不包括弱引用和软引用(见图)。

GC Root

看起来这与罐子膨胀有关,与我的过程无关。在这一点上,我被困住了,需要一些建议。

编辑1

Sean问起ThreadLocals。如果你看看没有过滤器的dominator_tree,你会发现java.lang.ApplicationShutdownHooks是堆的58%。如果我扩展其中一些条目,你会发现它们似乎在ThreadLocalMap中。我怎么能找到把它们放在那里的东西?

enter image description here

编辑2

肖恩的评论让我走上了正确的轨道。我正在使用Glassfish v 2.0,它有一个memory leak。它不断创建新的LogManagers并将它们添加到ApplicationShutdownHooks集合中。

我通过破解ApplicationShutdownHooks并手动从集合中删除对象来解决这个问题。

1 个答案:

答案 0 :(得分:0)

肖恩的评论让我走上了正确的轨道。我正在使用Glassfish v 2.0,它有内存泄漏。它不断创建新的LogManagers并将它们添加到ApplicationShutdownHooks集合中。

我通过破解ApplicationShutdownHooks并手动从集合中删除对象来解决这个问题。