У меня есть сайт, который был построен в modx, и когда его удар с нагрузкой использует всю вычислительную мощность процессора, а верхняя часть показывает много неработающих php-зомби-процессов, потребляющих это.
Вот спецификации системы …
PHP 5.2.14
php работает как suPHP
Mysql 5.1.51
Apache 2.0.63
modx 1.0.4
Для тестирования im с использованием ApacheBench и моделирования 500 соединений с 100 одновременными соединениями
Я проверил это сейчас двумя способами …
Отключение .htaccess и стресс-тестирование простой php-страницы, которая просто перекликается с «Hello world».
В верхней части это показывает, что php перестает функционировать и превращается в зомби, но они уходят довольно быстро
Вызов страницы, обслуживаемой modx, где php делает намного больше, порождает больше зомби, которые едят больше процессора, а некоторые из них не уходят быстро.
Что может быть причиной этого? Было бы ошибкой в нашем коде – в этом случае почему простой сценарий Hello World порождает зомби?
Это какая-то проблема с конфигурацией сервера или с слишком большой нагрузкой на сервер?
Поцарапать мою голову об этом все сейчас и надеяться на некоторые указания относительно того, что делать дальше.
Процесс – это «зомби» (который сверху отображается как Z) сразу после его выхода (обычно или нет). Идентификатор процесса остается в таблице процессов, пока его родитель не ждет (или «пожинает») его. В нормальных условиях, когда родительский процесс устанавливает обработчик сигнала для SIGCHLD, так что, когда сигнал отправляется (после выхода дочернего процесса), родительский процесс затем извлекает его по своему усмотрению.
Если родительский процесс по какой-то причине зависает, например, если он приостановлен или слишком занят или заблокирован, тогда дочерние процессы, которые выходят, не будут получены (пока родительский процесс не возобновится снова).
Обычно основной процесс Apache будет пожинать любого из его работников, которые выходят. Тем не менее, на сильно загруженном сервере, как вы описываете, у основного процесса может не хватить времени для его выполнения. Необразованные («зомби») процессы появляются вверху.
В этом случае процессы являются нормальными и не вызывают беспокойства, если не существует много, много незапланированных процессов.
Когда ваш тест закончен, исчезнут ли процессы зомби через короткое время? если это так, вам не о чем беспокоиться, все нормально.
По умолчанию apache настроен для рабочих процессов для выхода после обработки ограниченного количества запросов. Это сделано для того, чтобы не допустить утечки памяти из-под контроля. Возможно, вам поможет настройка этого параметра.
Во-первых, чтобы повысить производительность, вы можете поместить информацию из вашего файла .htaccess в главный файл конфигурации apache. Каждый раз, когда к каталогу, который содержит .htacess, обращается к нему, он будет читать и загружать файл .htaccess, в отличие от размещения правил перезаписи в вашей конфигурации apache, которая загружается только один раз во время запуска.
О проблеме php – если не слышал о suPHP, но вы скорее можете запустить fastcgi в сочетании с apache или – переключиться на fpm / nginx. Я использую его уже месяц, и это намного быстрее, чем Apache. Я имею в виду в два раза больше производительности.
Nginx обладает всеми функциями Apache. Поэтому переписывайте правила, htaccess вроде безопасности.