Как найти утечки памяти с помощью visualvm - PullRequest
22 голосов
/ 06 февраля 2012

Я подозреваю, что у нас большая утечка памяти в нашем мосту соединений ActiveMQ - мы видим типичные шаблоны утечки памяти (приложение загружается нормально, замедляется, если оно работает в течение продолжительных периодов времени или перезапускается снова и снова в течение коротких периодов времени). Я посмотрел современные передовые практики по поиску утечек памяти Java, и многие разработчики, похоже, отказываются от традиционных инструментов, таких как jhat / jmap, вместо новых (er) jvisualvm.

Запустив этот инструмент (и потратив несколько часов на его изучение), я могу сделать снимки профилировщика как для процессора, так и для памяти.

Я просто застрял на этом этапе - как мне проанализировать эти снимки, чтобы определить утечку? Существует множество документации о том, как использовать jvisualvm для создания снимков, но очень мало документации о том, как на самом деле их понять.

Заранее спасибо.

1 Ответ

27 голосов
/ 06 февраля 2012

Анализ утечки памяти с помощью visualvm не так прост.Он имеет инструмент / плагин под названием «сэмплер».Это может быть использовано для выборки памяти или процессора.Вы можете делать снимки через равные промежутки времени и искать возможные утечки.Вот некоторые подробности о том, как его использовать. Получено из быстрого поиска

Более эффективным способом будет получение дампа кучи (скажем, когда приложение замедлилось или когда OOMслучается ).VisualVM поможет вам получить heapdump (используя Дамп кучи на Монитор * вкладка 1010 *)

Этот файл может быть проанализирован с помощью MAT - некоторые детали здесьна Как мне проанализировать файл .hprof? и http://memoryanalyzer.blogspot.in/

...