这是我的MPM限制:
<IfModule mpm_prefork_module> StartServers 10 MinSpareServers 10 MaxSpareServers 10 MaxClients 10 MaxRequestsPerChild 2000 </IfModule>
但是,尽pipe如此,目前我已经有超过20个apache进程运行,而在过去的一两个小时内,已经有40-50个进程了。 MaxClient和MaxSpareServers不应该控制进程的数量(即大约10)吗?
有什么我失踪?
Apache有不同的口味,其中最常见的有prefork和worker 。 prefork模型产生几个进程,但每个进程一次只处理一个请求。 另一方面,工作者模型产生多个进程,每个进程有多个线程,每个线程一次处理一个请求。
根据您的发行版,您可能会运行与您所期望的不同的模型。 你期待prefork,但你确定这是正在运行的types? 要找出types:
$ httpd -V
服务器版本:Apache / 2.2.15(Unix)
服务器内置:2010年5月28日07:58:25
服务器模块Magic Number:20051115:24
加载的服务器:APR 1.4.2,APR-Util 1.3.9
编译使用:APR 1.4.2,APR-Util 1.3.9
架构:32位
Server MPM:Prefork
线程:不
分叉:是(可变进程数)
在这种情况下,我的Server MPM是Prefork但是你的可能是不同的。 在运行Apache2的Debian服务器上,它是Worker :
# / usr / sbin / apache2 -V 服务器版本:Apache / 2.2.9(Debian) 服务器MPM:工人
在一些机器上(比如RedHat),prefork和worker二进制文件都是不常见的(一个叫做httpd ,另一个叫httpd.worker或类似的东西)。 您可能需要仔细检查(使用ps或top或cat /etc/init.d/httpd ),它实际上正在启动。
对于这个问题的其他人来说,还有另一个潜在的原因。
我知道你相信你已经find了你的答案,但是用prefork你应该看到相同的东西,无论你看看它的过程。 你一定不会使用prefork。
这就是为什么:
http://httpd.apache.org/docs/2.4/mod/prefork.html
这个多处理模块(MPM)实现了一个非线程的预分叉web服务器。
我遇到了一个不同的解释
在configuration选项工作之前加载prefork模块,但是如果在加载它之后似乎加载了一些默认值,那么将您的IfModule指令呈现为惰性。 你可能只会看到这个定制的Apacheconfiguration,因为发行版本会正确设置启动。
Works – configuration应用
LoadModule mpm_prefork_module /usr/lib/apache2/modules/mod_mpm_prefork.so <IfModule mpm_prefork_module> StartServers 1 MinSpareServers 1 MaxSpareServers 0 ServerLimit 4 MaxClients 4 MaxRequestsPerChild 4000 </IfModule>
不起作用 – configuration没有效果
<IfModule mpm_prefork_module> StartServers 1 MinSpareServers 1 MaxSpareServers 0 ServerLimit 4 MaxClients 4 MaxRequestsPerChild 4000 </IfModule> LoadModule mpm_prefork_module /usr/lib/apache2/modules/mod_mpm_prefork.so
我觉得现在有点笨,但是这个: 为什么htop显示很多ps aux的apache2进程没有? 解释我的问题。