Мы используем 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 |" и анализ результатов - моя лучшая идея.
Очевидно, что неплохо бы заново изобрести колесо, если это возможно.
Спасибо!