Eclipse Memory Analyzer - 泄漏嫌疑人报告没有指出我的类 - 为什么?

kat*_*ura 7 java eclipse heap memory-leaks eclipse-rcp

我正在尝试确定我的webapp中是否有内存泄漏.我正在使用VisualVM和JMeter加载测试并观察堆.

我昨天将堆转储保存到文件并下载了Eclipse Memory Analyzer ...在对VisualVM感到非常沮丧之后,我认为Eclipse会比VisualVM更好地查明漏洞(如果有的话).

我在Eclipse中打开了堆文件并运行了他们称之为泄漏嫌疑人报告的内容.我认为它会指向我的webapp中的特定类,但事实并非如此.所以我不知道如何使用它提供的信息,以便找出泄漏可疑的任何特定类别的地方.

这是我的一个堆转储文件的泄漏可疑报告的结果.

One instance of "org.apache.catalina.session.StandardManager" loaded by "org.apache.catalina.loader.StandardClassLoader @ 0x261bdac0" occupies 16,977,376 (48.54%) bytes. The memory is accumulated in one instance of "java.util.concurrent.ConcurrentHashMap$Segment[]" loaded by "".


Keywords
org.apache.catalina.loader.StandardClassLoader @ 0x261bdac0
org.apache.catalina.session.StandardManager
java.util.concurrent.ConcurrentHashMap$Segment[]

报告中的其余详细信息如附图所示.我希望可以扩展图像以便仔细观察.... 在此输入图像描述

我知道Eclipse应该是非常好的软件.这是我最后一次尝试使用这样的东西来查找内存泄漏 - 我对这个软件如何用于此类知识的知识非常非常有限.教程和帮助页面描述了一些事情,好像你应该知道在点击几下后该做什么......我需要更多的帮助.

Tho*_*mas 4

虽然我没有任何使用 Eclipse 查找泄漏的经验,但我首先会问一个问题:您有多确定存在内存泄漏?从你的问题来看,你并不能确定是否存在泄漏,但你正在测试是否确实存在泄漏。最简单的测试方法是启动应用程序,记下它消耗了多少内存,让 JMeter 连续 24 小时运行它,然后查看它消耗了多少内存(可能是在执行 GC 之后)。如果您的应用程序消耗了很大一部分内存,或者已经死于OutOfMemoryError,那么您就会发生内存泄漏。

如果您发现确实存在内存泄漏,那么我首先建议通过 FindBugs 运行您的应用程序,看看它是否可以通过快速静态分析找到内存泄漏。如果这不起作用,那么这篇文章(尽管它相当旧)可能会帮助您理解 Eclipse 为您提供的结果。