我正在使用MAT比较两个堆转储。我每天都进行堆转储,并且每天增长约200兆。我认为该泄漏与java.util.zip有关,这是因为该表显示的内容,也是因为我们最近添加了一个新过程,该过程可以压缩和解压缩很多文件。 (见图片)
在这一点上,我打开支配器并为.Inflater过滤。那产生了大量的java.util.zip.Inflater。现在,我想看看是什么使它们保持打开状态,所以我选择了一个,并运行了GC根路径,排除了弱引用和软引用(见图)。
看起来这与罐子的充气有关,与我的过程无关。在这一点上,我陷入困境,需要一些建议。
编辑1
Sean询问了ThreadLocals。如果查看不带过滤器的dominator_tree,则会看到java.lang.ApplicationShutdownHooks是堆的58%。如果我展开其中一些条目,则可以看到它们似乎在ThreadLocalMap中。我将如何找到放置它们的东西?
编辑2
肖恩的评论使我走上了正确的道路。我正在使用Glassfish v 2.0,它具有memory leak。它会不断创建新的LogManager,并将它们添加到ApplicationShutdownHooks集合中。
我通过打开ApplicationShutdownHooks并从集合中手动删除对象来解决此问题。
最佳答案
肖恩的评论使我走上了正确的道路。我正在使用Glassfish v 2.0,它存在内存泄漏。它会不断创建新的LogManager,并将它们添加到ApplicationShutdownHooks集合中。
我通过打开ApplicationShutdownHooks并从集合中手动删除对象来解决此问题。