为什么我有这么多 apache2 进程?

Jos*_*osh 7 debian apache-2.2

我有一台运行 GNU/kFreeBSD 8.1-1-amd64 和 Apache 的 Debian 6.0.1 机器。我apache2-mpm-worker使用安装apt-get,我的apache2.conf文件包含:

<IfModule mpm_prefork_module>
    StartServers          4
    MinSpareServers       2
    MaxSpareServers       5
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule> 
<IfModule mpm_worker_module>
    StartServers          1
    MinSpareThreads       2
    MaxSpareThreads      20
    ThreadLimit          64
    ThreadsPerChild      20
    MaxClients          100
    MaxRequestsPerChild 400
</IfModule>
Run Code Online (Sandbox Code Playgroud)

所以我应该只看到几个 Apache 进程在运行。但是,它看起来更像是我在运行 prefork,因为我似乎有很多进程,而不是许多线程:

root@garrison:/# ps awwwwx | grep apache
78438 ?        S+     0:00 grep apache
78424 ?        S      0:00 /usr/sbin/apache2 -k start
78423 ?        S      0:00 /usr/sbin/apache2 -k start
78422 ?        S      0:00 /usr/sbin/apache2 -k start
78421 ?        S      0:00 /usr/sbin/apache2 -k start
78420 ?        S      0:00 /usr/sbin/apache2 -k start
78419 ?        S      0:00 /usr/sbin/apache2 -k start
78418 ?        S      0:00 /usr/sbin/apache2 -k start
78417 ?        S      0:00 /usr/sbin/apache2 -k start
78416 ?        S      0:00 /usr/sbin/apache2 -k start
78415 ?        S      0:00 /usr/sbin/apache2 -k start
78414 ?        S      0:00 /usr/sbin/apache2 -k start
78413 ?        S      0:00 /usr/sbin/apache2 -k start
78412 ?        S      0:00 /usr/sbin/apache2 -k start
78411 ?        S      0:00 /usr/sbin/apache2 -k start
78410 ?        S      0:00 /usr/sbin/apache2 -k start
78409 ?        S      0:00 /usr/sbin/apache2 -k start
78408 ?        S      0:00 /usr/sbin/apache2 -k start
78407 ?        S      0:00 /usr/sbin/apache2 -k start
78406 ?        S      0:00 /usr/sbin/apache2 -k start
78405 ?        S      0:00 /usr/sbin/apache2 -k start
78404 ?        S      0:00 /usr/sbin/apache2 -k start
78402 ?        S      0:00 /usr/sbin/apache2 -k start
78401 ?        S      0:00 /usr/sbin/apache2 -k start
78400 ?        S      0:00 /usr/sbin/apache2 -k start
78397 ?        Ss     0:00 /usr/sbin/apache2 -k start
Run Code Online (Sandbox Code Playgroud)

然而 Apache 显然安装了 worker 模块,而不是 prefork 模块:

root@garrison:/HostRAID/netboot/IntelNetboot.nbi# /usr/sbin/apache2 -l
Compiled in modules:
  core.c
  mod_log_config.c
  mod_logio.c
  worker.c
  http_core.c
  mod_so.c
Run Code Online (Sandbox Code Playgroud)

是什么赋予了?为什么我有这么多apache2进程?此服务器负载。(也就是说,没有http请求)

Edu*_*nec 4

我不确定,但你的ps输出让我想起了 Linux 2.4 - 线程过去一直显示为进程,直到从Linux 线程ps迁移到Native Posix Threads Library

此线程中的这句话似乎证实了我的怀疑:

GNU/kFreeBSD下的线程是进程克隆,与linux 2.4系列下类似

如果是这种情况,并不意味着工作人员出现故障。它不是分叉——这些是你看到的线程。Apache 文档ThreadsPerChild

该指令设置每个子进程创建的线程数。子进程在启动时创建这些线程,并且不再创建更多线程。(...) ThreadsPerChild 与 mpm_winnt 一起使用时的默认值为 64,与其他线程一起使用时为 25。

http://httpd.apache.org/docs/2.0/mod/mpm_common.html#threadsperchild