Мне нужна помощь в поиске утечки памяти с помощью MAT - PullRequest
8 голосов
/ 27 июля 2011

Я использую MAT для сравнения двух дампов кучи. Я получаю кучу свалок каждый день, и она растет примерно на 200 мегабайт каждый день. Я думаю, что утечка связана с java.util.zip из-за того, что показано в таблице, а также потому, что мы недавно добавили новый процесс, который архивирует и разархивирует множество файлов. (см. изображение)

Heap dump histogram compare

В этот момент я открываю доминатор и фильтрую для. Инфлятор . Это привело к большому списку java.util.zip.Inflater. Теперь я хочу посмотреть, что держит их открытыми, поэтому я выбрал один и запустил путь к корню GC, исключая слабые и мягкие ссылки (см. Изображение).

GC Root

Похоже, это связано с инфляцией в банке, а не с моим процессом. На данный момент я застрял и мне нужны предложения.

РЕДАКТИРОВАТЬ 1

Шон спросил о ThreadLocals. Если вы посмотрите на dominator_tree без фильтра, вы увидите, что java.lang.ApplicationShutdownHooks составляет 58% кучи. Если я разверну некоторые из этих записей, вы увидите, что они, похоже, находятся в ThreadLocalMap. Как бы я нашел то, что положил их туда?

enter image description here

РЕДАКТИРОВАТЬ 2

Комментарий Шона поставил меня на правильный путь. Я использую Glassfish v 2.0, и у него утечка памяти . Он постоянно создает новые LogManager и добавляет их в коллекцию ApplicationShutdownHooks.

Я решил эту проблему, взломав ApplicationShutdownHooks и вручную удалив объекты из коллекции.

1 Ответ

0 голосов
/ 30 июля 2011

Комментарий Шона поставил меня на правильный путь.Я использую Glassfish v 2.0, и у него есть утечка памяти.Он постоянно создает новые LogManager и добавляет их в коллекцию ApplicationShutdownHooks.

Я решил эту проблему, взломав ApplicationShutdownHooks и вручную удалив объекты из коллекции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...