尽pipe有maxclient和其他限制,apache产生了太多的进程

这是我的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有不同的口味,其中最常见的有preforkworker 。 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 MPMPrefork但是你的可能是不同的。 在运行Apache2的Debian服务器上,它是Worker

/ usr / sbin / apache2 -V
服务器版本:Apache / 2.2.9(Debian)
服务器MPM:工人

在一些机器上(比如RedHat),prefork和worker二进制文件都是不常见的(一个叫做httpd ,另一个叫httpd.worker或类似的东西)。 您可能需要仔细检查(使用pstopcat /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进程没有? 解释我的问题。