OutOfMemory Exception - как VisualVM помогает обнаружить утечку памяти с помощью файла heapdump? - PullRequest
4 голосов
/ 07 февраля 2011

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

Сегодня в моем веб-приложении наконец-то возникло исключение OutOfMemory. У меня были установлены параметры HeapDumpOnOutOfMemoryError и HeapDumpPath на случай, если это когда-нибудь случится. Был создан файл дампа кучи.

Я открыл этот файл (java_pid2760.hprof) в VisualVM, и, честно говоря, я не понимаю, как я должен быть в состоянии определить виновника этой утечки памяти ...

Как вы используете VisualVM для анализа дампа кучи и поиска класса / экземпляра, который генерирует утечку памяти?

Ответы [ 2 ]

3 голосов
/ 07 февраля 2011

Вот несколько ссылок, которые я нашел полезными при отладке утечек памяти:

http://olex.openlogic.com/wazi/2009/how-to-fix-memory-leaks-in-java/

http://www.ibm.com/developerworks/rational/library/05/0816_GuptaPalanki/

Редактировать:

Вы также можете попробовать: http://rejeev.blogspot.com/2009/04/analyzing-memory-leak-in-java.html

1 голос
/ 07 февраля 2011

Использовать VisualVM для анализа дампов кучи и точных утечек памяти нелегко, и я не рекомендовал бы использовать этот инструмент, если вы впервые работаете над проблемой такого типа. Попробуйте загрузить HPjmeter и позволить ему сделать всю работу за вас.

После открытия файла дампа выберите опцию Sorted Reference Graph Subtree. Это покажет вам все объекты в вашем веб-приложении, отсортированные по размеру. В большинстве сценариев утечки памяти вы пропускаете один тип объекта, который со временем всплывает в куче. HPjmeter поможет вам быстро идентифицировать этот случай.

...