Получить доступ

В проде выросли задержки, подозрение на GC. Опиши порядок диагностики — от сбора данных до вывода.

SeniorJVM и сборка мусора
Коротко

Сначала данные: GC-логи (-Xlog:gc*) и метрики приложения — совпадают ли пики задержек с паузами вообще. Если да — частота и длительность пауз, доля времени в GC, allocation и promotion rate, живой набор после full GC. Лечить: код и размер кучи → сборщик → флаги, по одному изменению.

  • Частые minor GC — много мусора, лечится в коде
  • Старое растёт от сборки к сборке — утечка или маленькая куча
  • Много объектов сразу в старом — мал Survivor или порог tenuring

А ещё Часто GC ни при чём — виноват пул соединений или внешний вызов

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Главное в ответе — порядок, а не список флагов. Первым делом собираешь данные: unified-логи через -Xlog:gc*, плюс метрики приложения, чтобы понять, совпадают ли пики задержек с паузами вообще, — часто выясняется, что GC ни при чём и виноват пул соединений или внешний вызов. Если совпадают, смотришь четыре вещи: длительность и частоту пауз, суммарную долю времени в GC, темп аллокаций и темп продвижения в старое поколение, а также размер живого набора после полной сборки. Дальше диагнозы читаются почти однозначно. Частые короткие minor GC — приложение производит слишком много мусора, лечится в коде: лишние промежуточные коллекции, боксинг, строки в цикле. Старое поколение растёт от сборки к сборке, full GC учащаются, а живой набор после них не падает — утечка или просто маленькая куча. Много объектов уезжает в старое поколение сразу — маловат Survivor или порог tenuring. И порядок лечения: сначала код и размер кучи, потом выбор сборщика, флаги — в последнюю очередь и по одному изменению, с повторным замером.

Что хотят услышать

  • Порядок: данные, корреляция, диагноз, лечение.
  • Соответствие симптомов и причин.
  • Изменение одного параметра за раз.

Частые ошибки

  • Начинать с подбора флагов вместо сбора логов.
  • Менять несколько параметров сразу и не понимать, что помогло.

Что спросят дальше

  • Как отличить утечку памяти от недостаточного размера кучи?
  • Почему длинная пауза может быть вызвана не сборкой, а выходом на safepoint?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем