В проде выросли задержки, подозрение на GC. Опиши порядок диагностики — от сбора данных до вывода.
Сначала данные: GC-логи (-Xlog:gc*) и метрики приложения — совпадают ли пики задержек с паузами вообще. Если да — частота и длительность пауз, доля времени в GC, allocation и promotion rate, живой набор после full GC. Лечить: код и размер кучи → сборщик → флаги, по одному изменению.
- Частые minor GC — много мусора, лечится в коде
- Старое растёт от сборки к сборке — утечка или маленькая куча
- Много объектов сразу в старом — мал Survivor или порог tenuring
А ещё Часто GC ни при чём — виноват пул соединений или внешний вызов
Подробно
Главное в ответе — порядок, а не список флагов. Первым делом собираешь данные: unified-логи через -Xlog:gc*, плюс метрики приложения, чтобы понять, совпадают ли пики задержек с паузами вообще, — часто выясняется, что GC ни при чём и виноват пул соединений или внешний вызов. Если совпадают, смотришь четыре вещи: длительность и частоту пауз, суммарную долю времени в GC, темп аллокаций и темп продвижения в старое поколение, а также размер живого набора после полной сборки. Дальше диагнозы читаются почти однозначно. Частые короткие minor GC — приложение производит слишком много мусора, лечится в коде: лишние промежуточные коллекции, боксинг, строки в цикле. Старое поколение растёт от сборки к сборке, full GC учащаются, а живой набор после них не падает — утечка или просто маленькая куча. Много объектов уезжает в старое поколение сразу — маловат Survivor или порог tenuring. И порядок лечения: сначала код и размер кучи, потом выбор сборщика, флаги — в последнюю очередь и по одному изменению, с повторным замером.
Что хотят услышать
- Порядок: данные, корреляция, диагноз, лечение.
- Соответствие симптомов и причин.
- Изменение одного параметра за раз.
Частые ошибки
- Начинать с подбора флагов вместо сбора логов.
- Менять несколько параметров сразу и не понимать, что помогло.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Сразу сменить сборщик на ZGC
- ✗Увеличить кучу вдвое и посмотреть, станет ли лучше, затем поменять флаги сборщика и размер молодого поколения
- ✗Снять дамп потоков и найти взаимную блокировку
- ✓GC-логи и метрики, совпадение пиков с паузами, затем причина, и по одному изменению за раз
Что спросят дальше
- Как отличить утечку памяти от недостаточного размера кучи?
- Почему длинная пауза может быть вызвана не сборкой, а выходом на safepoint?
Разбор темы
- GC: тюнинг и мониторинг
Ключевые флаги, unified GC-логи, метрики (паузы, throughput, allocation/promotion rate) и диагностика частых проблем.
Связанные вопросы
- С чего правильно начинать настройку сборщика мусора? Junior
- Что показывают метрики allocation rate и promotion rate? Middle
- В приложении участились длинные паузы full GC, при этом старое поколение почти всегда заполнено. О чём это говорит? Middle
- Как выбрать сборщик мусора: Parallel, G1 или ZGC? Senior
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.