我有一台运行 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请求)
我不确定,但你的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
| 归档时间: |
|
| 查看次数: |
3484 次 |
| 最近记录: |