Анализ памяти кучи Java с помощью visualvm и MAT

У меня запущено приложение, и недавно я заметил, что мой контейнер не отвечает и ведет себя по-другому, например, журналы не записываются и т. Д.

Поэтому я подумал о том, чтобы собрать дамп кучи gth и проанализировать, что происходит.

Я выбрал VisualVM и MAT. Анализируя, я сейчас запутался.

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

MAT показывает отчет как обычно, но размер кучи должен быть больше. Нужно ли учитывать размер мелкой кучи для аварийного завершения. Не удалось найти много информации о Shlo Heap.

И Visualvm показывает полную память.

ВИЗУАЛВМ

введите здесь описание изображения

MAT с unreachable_objects

введите здесь описание изображения

МАТИЧЕСКАЯ ГИСТОГРАММА

введите здесь описание изображения


person Srikanth Hugar    schedule 21.07.2015    source источник


Ответы (2)


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

Ваши варианты:

  1. Попробуйте другую (более новую) JVM (может быть утечка памяти)
  2. Проверьте наличие открытых соединений/настройте параметры пула соединений, чтобы устаревшие соединения были удалены.
  3. Дальнейшее изучение этих классов (SSLEngineResult, SSLEngineArgs)

Если вам нужна дополнительная помощь, обязательно добавьте информацию о типе нагрузки, которую видит приложение, какой контейнер вы используете и версию JVM.

person emu    schedule 21.07.2015
comment
Спасибо за быстрый ответ. Я использую apache karaf: 3.0.0, причал: 8.x, openjdk: 1.7.0_79. - person Srikanth Hugar; 21.07.2015
comment
Можете ли вы попробовать Oracle JDK и посмотреть, изменится ли что-нибудь? Кроме того, что касается фактической нагрузки на ваше приложение: есть ли у вас какая-либо пользовательская конфигурация потоков/акцепторов в вашем jetty.xml, которая позволила бы большое количество одновременных подключений? (может быть, сообщение jetty.xml) Сколько запросов сервер видит за заданный промежуток времени / сколько времени требуется после перезапуска, чтобы начались ваши проблемы? - person emu; 21.07.2015

"Подозреваемые в утечке" ничего не показывают? Если вы не хотите найти, где вы создаете все эти объекты SSLEngineResult и почему они все еще доступны - "Пути к корням GC" должны это сделать. Вариантов действительно мало: просто открыто так много одновременных подключений, что у вас есть ссылки на них в полях singletons/static class или в ThreadLocal.

person user158037    schedule 21.07.2015
comment
Утечка подозреваемых ничего не показывает. Мне нужно проверить одновременные открытые соединения. - person Srikanth Hugar; 21.07.2015
comment
Проблема была с некоторым другим кодом Java github.com/TooTallNate/Java-WebSocket/issues/171 . Спасибо. - person Srikanth Hugar; 24.07.2015