С чего правильно начинать настройку сборщика мусора?
- Как диагностировать проблемы со сборщиком мусора?
- Как включить логи GC?
- С чего корректно начинать тюнинг GC?
Начинать с измерений: включить логи GC и понять, в чём проблема — длинные паузы, частые сборки или рост живых данных.
- Логи:
-Xlog:gc*— длительность и частота пауз, сколько памяти остаётся после сборки - Часто проблема не в сборщике, а в коде: лишние объекты или удержание ненужных
А ещё Флаги «из статьи» без данных — перебор наугад
Подробно
Настройка сборщика без данных превращается в подбор флагов наугад: можно ухудшить ситуацию и не понять почему. Поэтому сначала собирают факты.
Что смотреть в логах GC (-Xlog:gc*:file=gc.log):
- длительность пауз и их распределение — влияют на время ответа;
- частота сборок — частые молодые сборки говорят о высокой скорости выделения объектов;
- объём живых данных после полной сборки — если растёт со временем, похоже на утечку;
- доля времени, которую приложение тратит на сборку.
Дополнительные инструменты: jstat для онлайн-статистики, Java Flight Recorder и профилировщики выделения памяти, дамп кучи (jcmd <pid> GC.heap_dump) для поиска утечек.
Часто выясняется, что проблема в коде: создание лишних объектов в горячем цикле, неограниченный кэш, удержание больших коллекций. Это лечится правкой кода, а не флагами.
Если дело всё-таки в настройках, типичные шаги: подобрать размер кучи (-Xms/-Xmx), выбрать сборщик под цель (задержка или пропускная способность), задать цель паузы для G1 (-XX:MaxGCPauseMillis).
Что хотят услышать
- Сначала измерения, потом настройка.
- Что смотреть в логах GC.
- Понимание, что проблема часто в коде.
- Инструменты диагностики — плюс.
Частые ошибки
- Крутить флаги, не посмотрев логи сборки.
- Наращивать кучу при утечке — это только отсрочит проблему.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗С увеличения размера кучи до максимально возможного
- ✗С переключения на самый современный сборщик
- ✓С измерений: включить GC-логи и найти проблему
- ✗С отключения сборки мусора на время нагрузки
Что спросят дальше
- О чём говорит рост занятости старого поколения после каждой сборки?
- Что показывает скорость выделения объектов?
- Какие базовые флаги задают первым делом?
- Что даёт unified logging -Xlog:gc?
Разбор темы
- GC: тюнинг и мониторинг
Ключевые флаги, unified GC-логи, метрики (паузы, throughput, allocation/promotion rate) и диагностика частых проблем.
Связанные вопросы
- Java-приложение запускают в контейнере с лимитом памяти. Как правильно задать размер кучи? Middle
- В проде выросли задержки, подозрение на GC. Опиши порядок диагностики — от сбора данных до вывода. Senior
- Что показывают метрики allocation rate и promotion rate? Middle
- В приложении участились длинные паузы full GC, при этом старое поколение почти всегда заполнено. О чём это говорит? Middle
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.