Назад | Перейти на главную страницу

Наблюдение за ImageMagick и убийство, когда они работают слишком долго

Я использую программу, которая вызывает ImageMagickКоманды командной строки. Предполагается, что они сработают мгновенно - возможно, 1 или 2 секунды. Однако в последнее время я заметил, что многие из них застряли.

Я использую monit для наблюдения за сервером и наблюдаю за некоторыми вещами, когда память выходит за рамки. Как лучше всего посмотреть ImageMagick? Я бы хотел убить процессы, если они были живы в течение 1 минуты. Однако я не хочу убивать всех одеялом convert процессы.

Что мне делать?

Спасибо!

Вы можете проанализировать вывод ps -ef (или ps -axf в системах BSDish), чтобы найти процессы с временем начала (STIME) лучше чем X, или вы можете использовать TIME (Используется процессорное время в секундах).


Реализация этого решения оставлена ​​в качестве упражнения для читателя, это относительно просто. Подсказки:

  • Вы можете сделать это с помощью сценария оболочки (for line in top; do ... done)
  • grep и awk (или cut) твои друзья
  • STIME изменяет формат в зависимости от того, как долго выполняется процесс.
    Если мы говорим в течение 24 часов, вам не следует об этом беспокоиться, и вы можете убить любой процесс, который не соответствует ожидаемому формату для чего-то, запущенного <24 часа назад.
  • Сначала проверьте свой сценарий (echo "I want to kill $PID ($line)") прежде, чем позволить ему реально стрелять процессами в голову!

Можно ли изменить способ вызова ImageMagick? Установка лимитов с помощью ulimit / limit перед запуском ImageMagick позволит вам установить количество секунд процессора, и ядро ​​позаботится об этом за вас.

http://www.cims.nyu.edu/cgi-comment/man.cgi?section=1&topic=limit