2017-02-07 4 views
-1

В нашей команде мы используем услугу, которая переполняет проблему. Это вызвано длинной задержкой API, в которой время GC занимало большинство частей. Затем я обнаружил, что использование памяти кучи очень велико. Я получил кучу кучи, используя jmap для службы, которая составляет около 4,4 ГБ. Я использовал анализатор памяти Eclipse для анализа дампа кучи. Я обнаружил, что 2.8 Гбайт кучи кучи - недостижимые объекты. У кого-нибудь есть предложения, что я должен сделать для дальнейшей отладки этой проблемы? Спасибо.Подозреваемые в утечке памяти

+0

Вы пытались выяснить, что представляют собой эти недостижимые объекты и откуда они взялись? – fvu

+0

Основные проблемы, с которыми я столкнулся с утечками памяти, были с IO Streams. Проверьте, не забыли ли вы их закрыть. Примечание: они остаются в памяти, даже если вы установили переменную в нуль (если вы не закрываете, конечно) – Zack

+0

Проблема заключается в том, что я не знаю, как проверить, откуда недоступны объекты, из которых они недостижимы. Не могли бы вы дать мне несколько предложений? – user7503314

ответ

0

Если у вас есть куча кучи, когда он заканчивается из памяти, я предлагаю использовать MAT для поиска подозрительных деревьев доминанта, который является узким ссылочным путем к большому сохраненному размеру набора.

Это может быть тот же самый класс, который заканчивается в разных загрузчиках классов или может быть задержкой сеанса HTTP, если проблема с веб-приложением или с плохим кэшем.

Предлагаю вам сначала начать с простых вещей.

  1. Быстрый просмотр того, что и где загружаются банки.
  2. Убедитесь, что разгрузка классов включена (с CMS).
  3. Используйте инструмент анализатора памяти на куче кучи, чтобы точно увидеть, что удерживается и кем.
+0

1. https://www.amazon.com/photos/share/25az5AbCzePBzR9AWU8TJU17ionXej2c49cFjjohClF 2. https://www.amazon.com/photos/share/8Dib5KWnPAY5y4BkeryDY4hcA0GLh2xTHewE3OjBixT Я использовал MAT для анализа файла HPROF. Но, как я уже сказал, MAT пропускает много недостижимых объектов. По мере появления второго снимка недостижимые объекты занимали почти 3 ГБ. Я думаю, что флаг CMSClassUnloadingEnabled поможет, но у меня есть вопрос, который включен в CMSClassUnloadingEnabled по умолчанию в JVM 1.8? Я также пытаюсь использовать visualVM для анализа файла hprof. – user7503314

+0

Вы можете использовать опцию '-XX: + PrintFlagsFinal', чтобы отобразить, какие опции HotSpot закончили использовать для запуска Java-кода, в то время как' -XX: + PrintFlagsInitial' отображают, какие опции были предоставлены HotSpot изначально. например 'java -XX: + PrintFlagsFinal -version | grep -iE 'CMSClassUnloadingEnabled'' сообщит вам, включен ли он или отключен. – fabfas

+0

В представлении Tree Dominator будет отображаться список каждого экземпляра объекта и отношения структуры древовидной структуры. Вы можете найти максимальный объем памяти, занятой несколькими объектами в процентах. Просто подсказка, вы можете что-то заметить! – fabfas