
В сентябре 2004 года разработчик Томас Хабетс вернулся к рабочей станции и обнаружил, что его экран разблокирован. Память закончилась, OOM Killer выбрал жертву и завершил xlock... Для того, чтобы больше такого не произошло, Хабетс Читать полностью »

В сентябре 2004 года разработчик Томас Хабетс вернулся к рабочей станции и обнаружил, что его экран разблокирован. Память закончилась, OOM Killer выбрал жертву и завершил xlock... Для того, чтобы больше такого не произошло, Хабетс Читать полностью »
Вы написали docker‑compose.yml, подняли сервис локально, всё крутится. Задеплоили на сервер, запустили docker compose up -d, неделю всё нормально. А потом контейнер с Postgres тихо съедает всю память на хосте и OOM‑киллер убивает соседний сервис. Или приложение падает в два часа ночи, а Docker не перезапускает его, потому что restart policy стоит в дефолтном no. Или логи за месяц занимают 40 ГБ, и на диске кончается место.
Старый добрый Proxmox с его контейнерами и виртуалками - по-прежнему рабочая лошадка многих компаний. И если нарезать много-много мелких контейнеров, то может случиться, что память куда-то девается со временем, а контейнеры падают в OOM без очевидной причины. Причем не все. Причем иногда. И зачастую проще перезапустить и ехать дальше чем разбираться. А причина есть, и она оказалось довольно проста.

Когда в Linux сервер базы данных непредвиденно завершает работу, нужно найти причину. Причин может быть несколько. Например, SIGSEGV — сбой из-за бага в бэкенд-сервере. Но это редкость. Чаще всего просто заканчивается пространство на диске или память. Если закончилось пространство на диске, выход один — освободить место и перезапустить базу данных.
Когда у сервера или процесса заканчивается память, Linux предлагает 2 пути решения: обрушить всю систему или завершить процесс (приложение), который съедает память. Лучше, конечно, завершить процесс и спасти ОС от аварийного завершения. В двух словах, Out-Of-Memory Killer — это процесс, который завершает приложение, чтобы спасти ядро от сбоя. Он жертвует приложением, чтобы сохранить работу ОС. Давайте сначала обсудим, как работает OOM и как его контролировать, а потом посмотрим, как OOM Killer решает, какое приложение завершить.