尽管有 maxclient 和其他限制,apache 还是产生了太多进程

Jos*_*kin 5 configuration apache-2.2

这是我的 MPM 约束:

<IfModule mpm_prefork_module>
    StartServers         10
    MinSpareServers      10
    MaxSpareServers      10
    MaxClients           10
    MaxRequestsPerChild  2000
</IfModule>
Run Code Online (Sandbox Code Playgroud)

然而尽管如此,我目前有 20 多个 apache 进程在运行,在过去一两个小时内,有多达 40-50 个。MaxClient 和 MaxSpareServers 不应该控制进程数(即大约 10 个)吗?

有什么我想念的吗?

PP.*_*PP. 2

Apache 有不同的风格,其中最常见的两种是preforkworker。prefork 模型会生成多个进程,但每个进程一次仅处理一个请求。另一方面,工作模型会生成多个进程,每个进程都有多个线程,每个线程一次处理一个请求。

根据您的发行版,您可能正在运行与您期望的模型不同的模型。您正在期待 prefork,但您确定这是正在运行的类型吗?要查找类型:

$ httpd -V
服务器版本:Apache/2.2.15(Unix)
服务器建成:2010年5月28日07:58:25
服务器模块魔数:20051115:24
服务器加载:APR 1.4.2、APR-Util 1.3.9
编译使用:APR 1.4.2、APR-Util 1.3.9
架构:32位
服务器 MPM:预分叉
  螺纹:无
    forked:是(可变进程数)

在这种情况下,我的Server MPMPrefork,但你的可能不同。在我运行 Apache2 的 Debian 服务器上,它是Worker

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

在某些机器(例如 RedHat)上,同时存在 prefork 和辅助二进制文件(一个被调用httpd,另一个被调用httpd.worker或类似的东西)的情况并不少见。您可能需要仔细检查(使用pstopcat /etc/init.d/httpd)实际正在启动的项目。