Ответ
GOGC
— это переменная окружения, которая управляет поведением сборщика мусора (Garbage Collector, GC) в Go. Она определяет, насколько должна вырасти куча (heap) перед тем, как будет запущен следующий цикл сборки мусора.
Значение GOGC
задается в процентах. Формула для запуска GC выглядит так:
GC запускается, когда размер новой кучи >= размер живой кучи * (1 + GOGC / 100)
Как влияют разные значения GOGC
:
GOGC=100
(значение по умолчанию): Сборщик мусора запускается, когда общий объем памяти в куче становится в два раза больше, чем объем "живых" данных после предыдущей сборки. Это сбалансированный вариант между использованием памяти и нагрузкой на CPU.- Пример: Если после сборки мусора осталось 100 МБ живых объектов, следующий GC запустится, когда размер кучи достигнет 200 МБ.
GOGC < 100
: Сборщик мусора будет запускаться чаще. Это приводит к меньшему пиковому потреблению памяти, но увеличивает нагрузку на CPU из-за частых пауз на GC.- Пример (GOGC=50): GC запустится, когда размер кучи достигнет 150 МБ.
GOGC > 100
: Сборщик мусора будет запускаться реже. Это снижает нагрузку на CPU, но увеличивает пиковое потребление памяти.GOGC=off
: Полностью отключает сборку мусора. Используется крайне редко, в основном для отладки или в короткоживущих программах, где потребление памяти не является проблемой.
Когда это может быть полезно?
Тюнинг GOGC
полезен для оптимизации производительности приложения под конкретные задачи:
- Для приложений с ограниченной памятью (например, в контейнерах): Можно установить
GOGC
в меньшее значение, чтобы экономить память. - Для CPU-bound приложений, где паузы GC критичны: Можно увеличить
GOGC
, чтобы GC запускался реже, ценой большего расхода памяти.