Когда какой-либо процесс забирает всю доступную память, система почти полностью перестает отвечать. Невозможно подключиться по ssh, не работают команды(в т.ч. reboot, если ssh-соединение уже открыто, система отвечает на действия пользователя с задержкой по несколько минут) и т.д.. В таком состоянии система может находиться 10-40 минут, потом процесс убивается. Как сделать так, чтобы процесс, пожирающий все ресурсы, сразу автоматически убивался?
Как сделать так, чтобы процесс, пожирающий все ресурсы, сразу автоматически убивался?
Простейший способ - установить обработчик нехватки памяти в пространстве пользователя. earlyoom предоставляет базовые возможности, такие как реакция на уровень MemAvailable и SwapFree. nohang позволяет также реагировать на зависание при интенсивном своппинге путем реакции на метрики PSI, а также дает возможность видеть подробное состояние памяти и подробную таблицу процессов перед корректирующим действием, а также прочие возможности.
Установить и настроить earlyoom, oomd по своим предпочтениям потребления памяти.
А чтобы знать что именно отжирает, установить atop или другую систему мониторинга.
С одной стороны можно тюнить oom, с другой - нужно стаивть мониторинг и разбираться. Начни с netdata или atop. То, что какое-то приложение отжирает всю память, неправильно само по себе, надо или понять, что пора добавлять память, или поправить конфигурацию, чтоб приложение вписывалось в то, что имеется.