🟡 Средний · 2 очк. Go runtime
Для чего используется GOMEMLIMIT (Go 1.19+)?
A Ограничивает количество горутин
B Устанавливает мягкий лимит памяти; GC становится агрессивнее при приближении к лимиту
C Ограничивает размер стека горутины
D Устанавливает жесткий лимит, при превышении процесс завершается
Объяснение вопроса

GOMEMLIMIT (Go 1.19+) устанавливает мягкий лимит на общее потребление памяти Go runtime. Когда потребление приближается к лимиту, GC становится агрессивнее - запускается чаще, чтобы не превысить границу.

  • Это мягкий лимит - при высокой нагрузке он может быть превышен
  • Заменил хак "memory ballast" (аллокация большого []byte для обмана GC)
  • Хорошо сочетается с GOGC=off: GC запускается только при приближении к лимиту
// Установка: 80% от доступной памяти контейнера
// GOMEMLIMIT=1600MiB (если контейнер 2 GiB)

// Или программно:
import "runtime/debug"
debug.SetMemoryLimit(1600 << 20)

Типичный паттерн для контейнеров: GOGC=100 GOMEMLIMIT=1600MiB - GC работает нормально, но становится агрессивнее при приближении к лимиту контейнера.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.