Eclipse Memory Analyzer - отчет об утечках не указывает на МОИ классы - почему? - PullRequest
7 голосов
/ 08 февраля 2011

Я пытаюсь определить, есть ли утечка памяти в моем веб-приложении. Я использую VisualVM и JMeter для загрузки теста и просмотра кучи.

Я сохранил дамп кучи в файл и скачал Eclipse Memory Analyzer вчера ... после большого разочарования VisualVM я подумал, что Eclipse точно определит утечку, если она вообще есть, лучше, чем VisualVM.

Я открыл файл кучи в Eclipse и запустил то, что они называют Отчетом о подозреваемых утечках. Я думал, что это будет указывать на определенный класс в моем веб-приложении, но это не так. Так что я понятия не имею, как использовать предоставленную информацию, чтобы выяснить, где в каком-либо конкретном классе шахты находится подозреваемый на утечку.

Вот результаты отчета о подозрении на утечку для одного из моих файлов дампа кучи.

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[]

Остальные детали в отчете показаны на прикрепленном изображении. Я надеюсь, что изображение может быть расширено для более близкого взгляда .... enter image description here

Я знаю, что Eclipse должен быть действительно хорошим программным обеспечением. Это моя последняя попытка использовать что-то подобное для обнаружения утечки памяти - я просто очень и очень ограниченно знаю, КАК это программное обеспечение можно использовать для таких целей. На страницах учебника и справки все описывается так, как будто вы должны знать, что делать после нескольких нажатий ... Мне нужна дополнительная помощь.

1 Ответ

4 голосов
/ 09 февраля 2011

Хотя у меня нет опыта использования Eclipse для поиска утечек, я сначала задам вопрос: насколько вы уверены, что у вас есть утечка памяти?На ваш вопрос не похоже, что вы уверены, что у вас есть утечка, но вы проверяете, есть ли она.Простейший способ проверить это - запустить приложение, заметить, сколько памяти оно потребляет, JMeter непрерывно работает с ним в течение 24 часов, и посмотреть, сколько памяти оно потребляет (возможно, после выполнения GC).Если ваше приложение потребляет значительно большую часть памяти или умерло от OutOfMemoryError, значит, у вас есть утечка памяти.

Если вы обнаружите, что у вас действительно есть утечка памяти, то я сначалаПредложите запустить приложение через FindBugs, чтобы увидеть, может ли оно обнаружить утечки памяти посредством быстрого статического анализа.Если это не сработает, тогда эта статья (хотя она довольно старая) может помочь вам понять результаты, предоставленные вам Eclipse.

...