Под управлением Linux у меня есть несколько процессов, которые иногда имеют сбои (игровые серверы), которые в конечном итоге используют 100% процессоров.
Я ищу программу или сценарий, чтобы проверить использование процессором списка процессов по имени, и если они находятся на 100% больше X раз, скажем, 30 секунд, убить их. Я попробовал ps-watcher, но не смог определить, как этого добиться.
Простое уничтожение процесса при 100% -ом использовании не сработает, так как это будет происходить в течение коротких периодов при нормальной работе.
Я также нашел этот скрипт, который, кажется, делает то, что я хочу, однако он ограничен одним процессом: ссылка
Любая помощь с благодарностью!
Ответы:
Попробуй монит .
Вы можете использовать такую конфигурацию для выполнения своей задачи:
Подробности об этой конфигурации можно найти в документации monit .
источник
start program
иstop program
линия только для случая , когдаmonit
потребности , чтобы перезагрузить ваш процесс. Вы все еще можете запустить его с помощью обычного сценария инициализации.monit
также может проверить, запущена ли уже программа (например, по ее PID-файлу или имени процесса).Это было то, что я искал, и использовал это в течение некоторого времени (немного измененный). В последнее время я добавил ошибку в свою работу, но мне нужно, чтобы приложение (игровой сервер) работало.
Я процитировал часть, в которой убит самый верхний PID, поскольку он убивал неправильный PID.
Вот мой последний черновик вашего сценария, на данный момент он находит самую верхнюю перегрузку и эффективно убивает его (также присылает мне информацию с информацией всякий раз, когда он что-то делает);
Этот маленький скрипт был чрезвычайно полезен, если вам не нравится, что он убивает какой-либо процесс, только электронная почта поможет вам быть в курсе.
источник
TOPPROCESS
отключена. Он не будет сортировать по фактическому значению, вместо этого он упорядочит записи в алфавитном порядке (например, 6% будет иметь приоритет над 12%).top -b -n 1 | sed 1,6d | sed -n 2p
Ниже приведен пример скрипта BASH, который может помочь вам получить некоторые подсказки для ваших собственных нужд.
Обратите внимание, что значение вашего $ CPU_THRESHOLD должно зависеть от количества (CPU) ядер, которые есть в вашей системе. Подробное объяснение по этой теме можно найти по адресу http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages .
Вы можете вызывать ваш скрипт из / etc / inittab или cronjob на любое количество минут, которое вы предпочитаете. Обратите также внимание, что пример сценария убьет самый верхний процесс, если $ CPU_LOAD больше, чем $ CPU_THRESHOLD.
источник