Контролировать и убивать сбежавшие процессы, используя 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 все еще инструмент, который я бы достал первым).

Другие вопросы по тегам