Различные скрипты Perl (с учетом сервера) вызывают модуль Perl с множеством функций на веб-сайте. EDIT: Сценарии используют использование lib для ссылки на библиотеки из папки. В периоды занятости сценарии (а не библиотеки) становятся зомби и перегружают сервер.Как избежать зомби в скриптах CGI Perl, выполняемых под Apache 1.3?
Списки серверов:
319 ? Z 0:00 [scriptname1.pl] <defunct>
320 ? Z 0:00 [scriptname2.pl] <defunct>
321 ? Z 0:00 [scriptname3.pl] <defunct>
У меня есть сотни экземпляров каждого.
EDIT: Мы не используем вилку, систему или 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.
Вам необходимо бросить трубную бомбу –
Двойной выстрел из ствола также хорошо работает. – Nate
Не позволяйте им есть ваш мозг. – Hai