@ZEAL Blog·厉
WWW Zeal Blog
We stand alone,
TOGETHER.

Apache启动时httpd进程数量变多

Posted by zeal on 2005-07-06 17:54 , 1409 characters |  + 0 - 1   English
转载请保留本行原始出处声明信息 : http://www.zeali.net/entry/113 MaDe1nZEAL
标签 ( 开发/理论 ):  ,  ,  , 
前几个月把需要在后台自动运行以及处理一些编辑操作请求队列的脚本统统集中到了一台巨牛的服务器上面跑,结果发现再牛的机器处理那么多并发的操作还是会吃不消。于是让老查再腾一台服务器出来分摊任务,同时还可以作为互备。下午老查找过来了,说新弄的那台服务器起来之后ps出来有几十个httpd,很奇怪。httpd.conf的配置是和原来服务器一样的,启动的时候按照配置的数量应该是只有5个才对。

一时想不出原因来,只好采用笨办法:比较两台服务器的不同。

比来比去,突然发现apache的logs目录下面比原来的服务器多了个大小为0名为 cgisock 的日志文件。

到httpd.conf里面一搜,这文件是配置给mod_cgid.c的,不过已经注释掉了。

再g一把mod_cgid,原来只要编译时选择了多道处理模块支持,这个模块就会缺省地被使用来代替mod_cgi >>

看来是这个多道处理模块(s)带来的问题了。看看这个介绍就明白了,Apache 2.0 带有多道处理模块的选择以处理网络端口绑定、接受请求并指派子进程来处理这些请求。

比如, 需要更好缩扩性的站点可以选择象worker这样线程化的MPM, 而需要更好的稳定性和兼容性以适应一些旧的软件的站点可以用prefork

MPM必须在编译配置时进行选择,并编译到服务器中。如果编译器能够确定线程功能被启用,它将会负责优化大量功能。因为一些MPM在Unix上使用了线程,而另外一些没有使用,所以如果在编译配置时选择了MPM并编译进Apache,Apache将会有更好的表现。

用 ./httpd -l 命令去查看两个服务器上的apache,果然原来的服务器使用的是prefork.c,而新服务器上使用的是worker.c。老查说那上面的apache并不是新安装的,很早就在。那就怪不得了。估计是之前有人安装的时候使用./configure脚本时用 --with-mpm= 参数选择了worker方式的MPM。在不同的MPM模式下,apache启动之后初始的进程数量不一样也就是正常的事情了。

下表列出了不同操作系统下默认的MPMs。如果你在编译时没有进行选择,这将是默认选择的MPM。

结论: 这并不是一个问题,只是不同MPM模式下的正常表现。

BeOS beos
Netware mpm_netware
OS/2 mpmt_os2
Unix prefork
Windows mpm_winnt

Last Modified on 2007-05-25 17:42
2 条评论:
- 李涛 () 于 2007-01-12 14:41
同样问题 随着时间推移 我们公司的WEB服务器上HTTPD进程也是越来越多 有次竟然超过了400
- download (link) 于 2007-10-16 01:14
为什么我的apache占用的内存几乎达到全部??
日志存档
2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年
2006年
本 Blog 原创内容
遵循以下授权:

Creative Commons
(创作共用) CC

署名-非商业性
-相同方式分享
ZEAL Blog 基于
Powered byPivot - 1.24.1: 'Arcee'
Pivot1.24.1
开发
系统部署于
Linode.com
Launched @
2005-04-27
Since 2005.04.27  梦想 就像鸡蛋 要么孵化 要么臭掉RSS Feed (Entries) | About me | Back To Home | @ZEAL | zbird.com | 沪ICP备05024379号