Ответ вслух Senior JVM: память, GC, загрузка классов обновлено

Утечка памяти в проде

Вопрос

Сервис на Java через несколько дней падает с OutOfMemoryError. Как будете искать причину?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Сначала смотрю текст ошибки: Java heap space, Metaspace, Direct buffer memory или нехватка нативных потоков, это разные истории. Для кучи смотрю график занятой памяти после сборок: если нижняя граница растёт день за днём, это утечка, если куча просто маленькая, она упирается сразу под нагрузкой.

Что должно прозвучать в ответе

  • Уточнить, какая память: heap, Metaspace, direct, native

  • Метрики кучи после GC: растёт ли нижняя граница

  • Heap dump при OOM и разбор в MAT: dominator tree, пути до GC roots

  • Типичные причины: кеши без лимита, ThreadLocal, статические коллекции, слушатели

  • JFR и профиль аллокаций

  • Временная мера vs исправление, проверка нагрузочным тестом

Что могут спросить следом

  • Чем heap dump опасен на проде?
  • Как отличить утечку от просто маленькой кучи?
  • Что делать, если растёт RSS процесса, а куча нет?

Разбор

Сначала смотрю текст ошибки: Java heap space, Metaspace, Direct buffer memory или нехватка нативных потоков, это разные истории. Для кучи смотрю график занятой памяти после сборок: если нижняя граница растёт день за днём, это утечка, если куча просто маленькая, она упирается сразу под нагрузкой. Включаю -XX:+HeapDumpOnOutOfMemoryError или снимаю дамп через jcmd GC.heap_dump, помня, что это пауза и большой файл с персональными данными. Дамп открываю в Eclipse MAT, смотрю dominator tree и путь от подозрительных объектов до GC roots. Частые виновники: кеш в статической мапе без ограничения, ThreadLocal в пуле без remove, накопление слушателей, сессии. Для живого профиля аллокаций использую JFR. Если растёт RSS, а куча нет, смотрю Native Memory Tracking и direct-буферы. После исправления подтверждаю нагрузочным тестом.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме