FreeBSD下Apache2.0运行模型分析及性能调整

http://tech.ddvip.com   2006年04月01日    社区交流

本文详细介绍FreeBSD下Apache2.0运行模型分析及性能调整

  注意:不象在Linux和Solaris,在FreeBSD上用正常方式--with-mpm=worker是无效的!!即使这么做在安装后也只能看到prefork.c即prefork模式!!如果你细心的话在configure过程中你会看到

Applying APR hints file rules for i386-unknown-freebsd4.8
setting enable_threads to "no"
APR will be non-threaded
The currently selected MPM requires threads which your system seems to lack

  不过这并不说明一定不能在FreeBSD上使用线程,其实在configure时有个未公开的选项--enable-threads ,它在configure --help时是看不到的。显式加上它就可以以worker MPM来配置编译Apache2.0了,但是虽然编译没有问题,可是Apache起动后根本无法正常工作,浏览器会一直等待回应(在FreeBSD4.8,5.1上均不行),个人认为FreeBSD在高端还有很长的路要走,线程,PAE,SMP--虽然5.1有了不小的改进但仍然不是十分完善。

  因此,对于FreeBSD来说,prefork几乎还是目前的唯一MPM,我在下面主要还是讨论它的工作原理和相关指令调整。

  查看缺省生成的httpd.conf配置文件,会发现里面包含如下的配置段:

<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>

  prefork的工作原理是这样的:控制进程在最初建立StartServers个子进程后, 为了满足MinSpareServers设置的需要,创建一个进程,等待一秒钟,继续创建第二个,等待一秒钟,继而创建四个,如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止,这也就是预派生(prefork)的由来。这种模式可以使得不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。

责编:豆豆技术应用

正在加载评论...