我有一台运行GNU / kFreeBSD 8.1-1-amd64和Apache的Debian 6.0.1机器。 我使用apt-get安装了apache2-mpm-worker ,并且我的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>
所以我应该只看到几个Apache进程在运行。 然而,它看起来更像是我正在运行的prefork,因为而不是许multithreading我似乎有很多进程:
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
然而,Apache显然已经安装了工作模块,而不是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
是什么赋予了? 为什么我有这么多的apache2进程? 这台服务器没有负载。 (也就是说,没有http请求)
我不确定,但是你的ps输出提醒了我很多Linux 2.4的线程 – 在Linux线程移植到Native Posix线程库之前,这些线程在ps上用作进程。
这个post引用这个post似乎证实了我的怀疑:
在GNU / kFreeBSD下,线程是进程克隆,和linux 2.4系列一样
如果是这种情况,这并不意味着工人出现故障。 这不是分手 – 那些是你看到的线程。 Apache ThreadsPerChild文档:
该指令设置每个subprocess创build的线程数。 孩子在启动时创build这些线程,从不创build更多。 (…)使用mpm_winnt时,ThreadsPerChild的默认值为64,与其他值一起使用时,默认值为25。
http://httpd.apache.org/docs/2.0/mod/mpm_common.html#threadsperchild