Контролировать и убивать сбежавшие процессы, используя 100% IO?
У меня есть несколько процессов, которые должны запускаться с высоким приоритетом (chrt 98), которые иногда решают жестко блокировать и привязывать 1 ядро на 100% (не так уж и много), но что более важно, он будет использовать все операции ввода-вывода в системе настолько, что невозможно войти в систему через ssh, чтобы убить ее или выполнить какую-либо задачу на машине, которая не загружена в оперативную память. Если у меня уже есть что-то вроде htop, я могу нормально завершить процесс. Существуют ли какие-либо утилиты / способы для отслеживания этого типа запущенного процесса и уничтожения всего, что использует 100% системного ввода-вывода в течение более X промежутка времени? Спасибо!
3 ответа
Предполагая, что приложение использует дисковый ввод-вывод, можете ли вы просто переместить файловые системы, к которым оно обращается, на отдельные диски? Таким образом, у вас будет IO, чтобы сэкономить на дисках, на которых установлена ОС, и вы сможете войти в систему и управлять (то есть уничтожать!) Процессом.
Вы не можете запустить программу с nice
(и с более низким приоритетом)? Таким образом, по крайней мере, вы сможете легко зайти в коробку и легко ее убить.
Конечно, лучшим решением было бы исправить поведение нарушающего процесса (требуются подробности).
Эта ветка о сбое сервера также, кажется, содержит то, что вы просите конкретно.
Как сказал другой участник, ваш процесс выполняется с nice
это путь, но вы упомянули, что хотите запустить его с высоким приоритетом, что странно... имейте в виду, что если вы запускаете процесс с наивысшим приоритетом и он привязан, ваша система мониторинга может не даже быть в состоянии убить его, если ваш монитор по-прежнему имеет более высокий приоритет. Тем не мение....
Бог, как и некоторые другие инструменты управления процессами, может легко убить процесс, если он плохо работает, одним из нескольких способов. Конфигурация выглядит следующим образом: вы устанавливаете проверки с определенным интервалом, а затем можете сказать "после пяти проверок, nuke если он постоянно превышает загрузку процессора на 98% ":
restart.condition(:cpu_usage) do |c|
c.above = 98.percent
c.times = 5
end
Другой, другой взгляд, на который вы могли бы взглянуть, chpst
из системы runit - это позволяет вам элегантно устанавливать границы для вещей (но для ограничения процессора, nice
все еще инструмент, который я бы достал первым).