Эффективный мониторинг детей httpd и сигнализация тех, кто использует слишком много памяти / процессора - PullRequest
3 голосов
/ 23 августа 2011

Мы используем Apache / mod_perl 2 и иногда получаем дочерний httpd-процесс, который выходит из-под контроля, либо потребляя постоянно увеличивающиеся объемы памяти, либо макс. Процессор.

Я хотел бы следить за такими дочерними объектами каждую секунду или около того, и при нахождении одного из них отправьте ему сигнал USR2, чтобы он мог сбросить свой текущий стек Perl в наши журналы ошибок.

(Обратите внимание, что мы используем rlimit / BSD :: Resource, но когда процесс превышает свой предел памяти, он сразу же умирает, не имея хорошего способа войти или выполнить действие (см. Получение трассировки стека из Perl "из «ошибка памяти» ). Таким образом, ограничение AFAICT должно быть дополнено программой внешнего мониторинга.)

Я вижу, что monit высоко ценится, но я не могу найти какой-либо способ отслеживать и отправлять сигнал отдельному процессу httpd. Похоже, что он предназначен для уничтожения или перезапуска сервисов, таких как apache в целом. Я что-то упустил?

Если мне нужно написать сценарий Perl, который делает это, есть ли что-нибудь, что будет эффективно контролировать таблицу процессов? Proc :: ProcessTable занимает 0,02 секунды процессора, чтобы сгенерировать одну таблицу, поэтому ее запуск так, что каждая секунда кажется излишне дорогой. Открытие "/ usr / bin / top -b -d 1 |" и анализ результатов - моя лучшая идея.

Очевидно, что неплохо бы заново изобрести колесо, если это возможно.

Спасибо!

1 Ответ

2 голосов
/ 23 августа 2011

Вы можете использовать контрольные группы , чтобы быстро получить список процессов, связанных с Apache, и сфокусировать ваше внимание на нем. Просто поместите основной процесс apache в контрольную группу, прежде чем он вызовет какие-либо дочерние процессы (например, вы можете добавить процесс запуска в контрольную группу), а затем прочитайте файл задач в виртуальном каталоге cgroup. Для каждого идентификатора PID проверьте использование его ЦП с помощью обычных механизмов / proc.

...