> Что происходит если памяти не хватает (Go)
Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: Avito
Стек: Go
> Пример ответа
Если в Go-приложении не хватает памяти, происходит следующее:
-
Out of Memory (OOM) Kill - операционная система (Linux) запускает OOM Killer, который завершает процесс с наибольшим потреблением памяти (обычно это ваше приложение). Это приводит к аварийному завершению программы без возможности корректно обработать ошибку.
-
Паника runtime - если аллокация памяти происходит внутри Go-сборщика мусора (GC) или runtime, может возникнуть паника с сообщением
runtime: out of memory. Это не перехватываетсяrecover()в обычном коде, так как происходит на уровне рантайма. -
Симптомы до OOM:
- Резкий рост времени GC (сборщик мусора пытается освободить память, но не успевает).
- Увеличение задержек (latency) из-за частых циклов GC.
- Появление ошибок
cannot allocate memoryв логах при попытке выделить память.
Как диагностировать и предотвратить:
- Используйте
pprofдля профилирования памяти:go tool pprof -http=:8080 http://localhost:6060/debug/pprof/heap. - Установите лимиты памяти через
GOMEMLIMIT(Go 1.19+) - это мягкий лимит, который помогает GC работать более предсказуемо. - Настройте
GOMAXPROCSиGOGCдля контроля частоты сборки мусора. - Используйте
runtime/debug.SetMemoryLimitдля программного ограничения. - В контейнерах (Docker/K8s) обязательно задавайте
memory limitsиmemory requests.
Пример настройки лимита:
GOimport "runtime/debug"func main() {debug.SetMemoryLimit(512 * 1024 * 1024) // 512 MB// ... остальной код}
Если память закончилась, приложение упадёт. Единственный способ избежать - контролировать потребление и вовремя реагировать на предупреждения.
> Похожие задачи по Go
Какие данные кэшируются и как работает кэширование
Что происходит с персональными данными при обработке
Есть ли у TCP и UDP операция подтверждения доставки
На какие действия можно повесить триггер
> Похожие задачи по backend
Какие данные кэшируются и как работает кэширование
Что происходит с персональными данными при обработке
Есть ли у TCP и UDP операция подтверждения доставки
На какие действия можно повесить триггер
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью