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

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

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

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

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

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

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

VisualVM

MAT с недостижимыми объектами

МАТ ГИСТОГРАММА

2 ответа

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

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

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

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

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

Другие вопросы по тегам