Перейти к содержимому
3 / 15

GOGC и GOMEMLIMIT: как настраивать сборщик мусора

У сборщика две ручки, и они дополняют друг друга. GOGC (по умолчанию 100) задаёт, насколько куча должна вырасти относительно живых данных, прежде чем начнётся сборка: при 100 сборка стартует, когда куча удвоилась. Увеличение до 200–400 снижает частоту сборок и процессорные расходы ценой большего потребления памяти — разумный обмен для сервиса с запасом по памяти. GOMEMLIMIT (появился в Go 1.19) задаёт мягкий предел общего потребления: приближаясь к нему, рантайм начинает собирать чаще, независимо от GOGC. Мягкий он потому, что не убивает программу — если живых данных больше предела, сборщик просто работает непрерывно. Рабочая комбинация для контейнера: GOMEMLIMIT в районе 80–90% лимита памяти пода вместе с GOGC=off или высоким значением — тогда сборка идёт редко, пока есть запас, и включается по мере приближения к пределу. Это заметно снижает и число сборок, и риск получить OOMKilled.