Как долго процессы 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 до тех пор, пока скрипт не выйдет или не будет превышен срок.