Итак, в ImageMagick есть команда «convert», которую я использую для своей (Linux) веб-платформы, чтобы иметь дело с изменением размера изображения и т.п.
Иногда эта команда «застревает», то есть начинает поглощать ресурсы машины, пока вся машина не станет недоступной. В этом случае вход в систему может занять несколько минут.
Итак, я ищу одно из двух решений:
При использовании этой команды - есть ли способ определить, сколько максимальных ресурсов она может использовать?
Могу ли я запустить cron-скрипт, который идентифицирует эти «застрявшие» процессы и убивает их? Т.е. фильтровать время ЦП или использование ЦП и убивать при превышении определенного порога.
Я, вероятно, предпочел бы решение номер 2, так как решение номер 1 все еще может дать несколько таких процессов, каждый из которых ограничен и застревает, и вместе они все равно будут поглощать мои ресурсы.
Я не могу определить, когда и почему это происходит, система тормозит и зависает до тех пор, пока я не "killall convert", тогда все в порядке. Эта команда запускается тысячи раз в час, поэтому, если я не буду регистрировать каждое использование каким-либо образом, я, к сожалению, не могу сказать, какое из них застряло.
Итак, по сути, сценарий оболочки, который идентифицирует, убивает и регистрирует, когда convert застревает.
Любые идеи?
При использовании этой команды - есть ли способ определить, сколько максимальных ресурсов она может использовать?
Непосредственно перед вызовом команды convert вы можете установить ограничение ресурсов на максимальное время ЦП, которое может использовать процесс, convert
тогда будет убит автоматически после превышения лимита.
Это будет работать в зависимости от того, как вы вызываете команду изначально. В exec
может быть ненужным.
#!/bin/sh
ulimit -St 60
exec /usr/bin/convert $*
## if exec not present this gets executed after.
ulimit -St unlimited
Я создал сценарий, который убивает некоторые процессы, перечисленные в массиве, если загрузка ЦП превышает XX% в течение YY секунд или убивает процессы, которые работают более ZZ секунд.
Вы можете установить XX, YY, ZZ в верхней части файла.
Вы можете использовать ps или top для проверки процессов.
Также есть режим пробного запуска, чтобы проверить, но не убить.
В конце концов, скрипт отправляет электронное письмо, если некоторые процессы были убиты.
Вот мое репо на Github: https://github.com/padosoft/kill-process
Вот несколько скриншотов: Пример вывода