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

Что показывают метрики allocation rate и promotion rate?

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

Allocation rate — сколько МБ/с приложение создаёт объектов: чем выше, тем чаще minor GC. Promotion rate — сколько МБ/с переезжает в старое поколение: чем выше, тем чаще old/full GC.

  • Высокий allocation rate лечат кодом: меньше временных объектов, без лишней упаковки
  • Высокий promotion rate — объекты живут дольше одной-двух сборок или мал Survivor
  • Снимают из GC-логов (-Xlog:gc*), JFR, Micrometer

А ещё Сотни МБ/с — норма для нагруженного сервиса; важна динамика и связь с паузами

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

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

GC: Eden, Survivor и продвижение

Подробно

Allocation rate. Eden заполняется со скоростью аллокаций; заполнился — minor GC. Удвоили аллокации — удвоили частоту молодых сборок. Источники: промежуточные коллекции в стримах, упаковка Integer, конкатенация строк в цикле, лишние DTO, логирование с формированием строк при выключенном уровне.

Promotion rate. Объекты, пережившие несколько молодых сборок (порог tenuring), уезжают в старое поколение. Если туда едет много «среднеживущего» — кэшей, буферов запросов, сессий, — старое поколение быстро заполняется и требует дорогих сборок. Признак premature promotion: высокий promotion rate при том, что объекты вскоре умирают.

Где смотреть: GC-логи и анализаторы (GCeasy, GCViewer), JFR (события выделения с профилем — какой код аллоцирует), метрики jvm.gc.memory.allocated и jvm.gc.memory.promoted в Micrometer.

Анализ всегда в связке: частота и длительность пауз, обе метрики, живой набор после full GC.

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

  • Определение и связь каждой метрики с видом сборок.
  • Как снизить каждую.
  • Где измерить.

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

  • Путать allocation rate с размером кучи.
  • Лечить высокий allocation rate только флагами.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓allocation rate — сколько МБ/с создаётся (высокий разгоняет minor GC); promotion rate — сколько уезжает в old (высокий ведёт к full GC)
  • ✗Это размеры -Xms и -Xmx соответственно
  • ✗allocation rate — частота full GC, promotion rate — частота minor GC
  • ✗Оба показывают только длительность пауз stop-the-world

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

  • Как высокий allocation rate связан с паузами?
  • Где взять эти метрики в проде?

Разбор темы

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

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

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

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

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