Ответ вслух Senior Память и OOM обновлено

Память растёт: утечка или нет

Вопрос

Графики показывают, что память сервиса растёт неделю, пока его не убивает OOM. Как будешь разбираться?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Сначала уточняю, что растёт. RSS процесса, общая память cgroup (в ней ещё page cache) или просто занятая память узла, которая на деле кеш.

Что должно прозвучать в ответе

  • Подтвердить: какая именно память растёт (RSS процесса, page cache, память cgroup) и коррелирует ли с нагрузкой

  • Отличить утечку от нормы: прогрев кешей, аллокатор не отдаёт память, GC с большим запасом

  • Снять данные: heap dump или профилировщик кучи (JVM, Node, Go pprof), `smaps` для нативной памяти

  • Сравнить два снимка во времени и найти растущие объекты

  • Временно: лимиты, рестарт по расписанию как костыль, алерт до OOM

  • Исправить причину и проверить нагрузочным тестом

Что могут спросить следом

  • Почему RSS у Node.js не уменьшается после GC?
  • Как найти утечку нативной памяти?
  • Как правильно выставить лимит кучи в контейнере?

Разбор

Сначала уточняю, что растёт. RSS процесса, общая память cgroup (в ней ещё page cache) или просто занятая память узла, которая на деле кеш. Сопоставляю с нагрузкой: если память растёт с трафиком и падает с ним, это не утечка. Нормальные причины роста: прогрев кешей, JIT, аллокатор не возвращает страницы ОС, GC работает с запасом. Признак утечки: устойчивый рост при постоянной нагрузке без плато. Тогда снимаю данные: для JVM heap dump и анализатор, для Node снимки кучи через inspector, для Go pprof. Делаю два снимка с интервалом и сравниваю, какие объекты растут: часто это кеш без ограничения, подписки, не закрытые соединения, глобальные массивы. Если растёт нативная память, смотрю smaps, pmap и инструменты вроде jemalloc-профилирования. Пока чиню, ставлю алерт до OOM и, если нужно, перезапуск как временную меру. После исправления проверяю нагрузочным тестом, что кривая выходит на плато.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме