Различные сценарии Perl (включая серверную часть) вызывают модуль Perl со многими функциями на веб-сайте.
EDIT:
Скрипты используют , используют lib для ссылки на библиотеки из папки.
В периоды занятости скрипты (не библиотеки) становятся зомби и перегружают сервер.
Сервер перечисляет:
319 ? Z 0:00 [scriptname1.pl] <defunct>
320 ? Z 0:00 [scriptname2.pl] <defunct>
321 ? Z 0:00 [scriptname3.pl] <defunct>
У меня есть сотни экземпляров каждого.
EDIT:
Мы не используем fork, system или exec, кроме директивы SSI
<!--#exec cgi="/cgi-bin/scriptname.pl"-->
Насколько я знаю, в этом случае сам httpd будет владельцем процесса.
MaxRequestPerChild имеет значение 0, что не должно позволить родителям умереть до завершения дочернего процесса.
До сих пор мы полагали, что временное приостановление работы некоторых из сценариев помогает серверу справиться с несуществующими процессами и предотвратить его падение, хотя процессы зомби все еще формируются без сомнения.
По-видимому, gbacon кажется наиболее близким к истине с его теорией, что сервер не в состоянии справиться с нагрузкой.
Что может привести к отказу httpd от этих процессов?
Есть ли лучшая практика, чтобы предотвратить это?
Спасибо
Ответ:
Дело идет к Робу.
По его словам, CGI-скрипты, которые генерируют SSI, не будут обрабатываться этими SSI. Оценка SSI происходит перед запуском CGI в цикле запросов Apache 1.3. Это было исправлено в Apache 2.0 и более поздних версиях, чтобы CGI могли генерировать команды SSI.
Поскольку мы работали на Apache 1.3, для каждого просмотра страницы SSI превращался в несуществующие процессы. Несмотря на то, что сервер пытался их очистить, он был слишком занят выполнением задач, чтобы иметь возможность выполнить их успешно. В результате сервер упал и перестал отвечать на запросы.
В качестве краткосрочного решения мы рассмотрели все SSI и перенесли некоторые процессы на клиентскую сторону, чтобы освободить ресурсы сервера и дать ему время для очистки.
Позже мы обновились до Apache 2.2.