Назад | Перейти на главную страницу

Как долго процессы Apache остаются в живых?

Когда apache разветвляет процесс для mod-php, как долго он остается в живых? Умирает ли процесс, как только будет отправлен ответ, или он останется в живых, пока браузер не получит полный ответ?

Если вы используете mod-php, вы, вероятно, используете prefork MPM, который порождает дочерние процессы для обработки запросов. Количество и продолжительность жизни этих детей, как указано в директивах вашего основного apache2.conf (или httpd.conf, в зависимости от вашего дистрибутива).

Найдите часть, которая выглядит так (ваши значения могут отличаться):

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

Apache нерестится StartServers дети автоматически. Эти процессы будут бездействовать до тех пор, пока не поступит запрос. Если дети станут занятыми, они будут появляться до MaxClients дети справляются с нагрузкой, стараются поддерживать MinSpareServers праздные дети, чтобы подобрать новые запросы. Как только все утихнет, праздные дети будут убиты, пока счет не опустится до MaxSpareServers.

То, о чем вы спрашиваете, обрабатывается MaxRequestsPerChild. Значение 0 означает, что дети могут жить вечно, что является значением по умолчанию в большинстве установок apache. Если установить что-либо еще, это означает, что каждый дочерний процесс будет принудительно завершен и перезапущен, независимо от текущей нагрузки, после того, как он обработает это количество запросов.

Подробнее о префорке MPM здесь: http://httpd.apache.org/docs/2.2/mod/prefork.html

httpd не разветвляет процесс для mod_php. Он формирует для себя процесс, в который встроен mod_php. Ребенок останется в живых, пока не выполнит MaxRequestsPerChild Запросы. Сам mod_php будет обрабатывать каждый запрос PHP-скрипта до тех пор, пока скрипт не завершится или не будет превышен лимит времени.