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

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

2 ответа

Решение

Если вы используете 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. Если задано что-либо еще, это означает, что каждый дочерний процесс будет принудительно убит и перезапущен, независимо от текущей загрузки, после того, как он обработает это количество запросов.

Более подробную информацию о prefork MPM можно найти здесь: http://httpd.apache.org/docs/2.2/mod/prefork.html

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

Другие вопросы по тегам