当 apache 为 mod-php 派生一个进程时,它会存活多久?该进程会在响应发送后立即终止吗?还是会一直存活到浏览器收到完整响应为止?
答案1
如果您使用的是 mod-php,那么您可能正在使用 MPM prefork
,它会生成子进程来处理请求。这些子进程的数量和生命周期由主文件中的指令控制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
答案2
httpd 不会为 mod_php 派生进程。它为自己派生一个进程,该进程中嵌入了 mod_php。子进程将一直保持活动状态,直到它完成MaxRequestsPerChild
请求。mod_php 本身将继续处理 PHP 脚本的每个请求,直到脚本退出或超出时间限制。