前面我们和大家分享了三种Apache性能优化方案,本文我们继续和大家分享。
下面讨论以下默认没有安装的几个重要的模块。。(除了prefork)
常用的模块:
最常用的可能就是php和JAVA应用服务器的前端,我们当前应用不需要。此外,从性能上讲利用mod_gzip可以减少40%左右的流量,减少机器用于传输的负载,建议使用。我们使用的文件比较小,可以看看压缩算法的时间开销和 传输的负载的减小是不是合算。 而 mod_expires可以减少10%左右的重复请求,让重复的用户对指定的页面请求结果都CACHE在本地,根本不向服务器发出请求。但是我们使用的是内存文件系统,关于cache的优化可以完全不予考虑。
基于反相代理的WEB加速:
squid和mod_proxy都可以实现反相代理加速。而基于缓存的代理加速比起原有WEB服务,速度会有数量级的提升。同样内存文件系统不需要。
影响性能的关键指标MPM:
MPM(Multi-Processing Modules,多道处理模块)。MPM看起来和其它Apache模块非常类似。与其他类型模块不同的是,Apache必须有一个且仅有一个MPM处在运行中。。 指定MPM的方法
$ ./configure --help|grep mpm
显示如下:
--with-mpm=MPM
Choose the process model for Apache to use.
MPM={beos|worker|prefork|mpmt_os2| perchild|leader|threadpool}
Beos、mpmt_os2分别是BeOS和OS/2上缺省的MPM,perchild主要设计目的是以不同的用户和组的身份来运行不同的子进程。这在运行多个需要CGI的虚拟主机时特别有用,会比1.3版中的SuExec机制做得更好。leader和threadpool都是基于worker的变体,还处于实验性阶段,某些情况下并不会按照预期设想的那样工作,所以Apache官方也并不推荐使用。因此,我们主要阐述prefork和worker这两种和性能关系最大的产品级MPM 。
如果不用“--with-mpm”显式指定某种MPM,prefork就是Unix平台上缺省的MPM。
prefork本身并没有使用到线程,2.0版使用它是为了与1.3版保持兼容性;prefork用单独的子进程来处理不同的请求,进程之间是彼此独立的,这也使其成为最稳定的MPM之一。
prefork的工作原理是,控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这就是预派生(prefork)的由来。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。
以上就是Apache的性能优化(三)的内容,更多相关内容请关注PHP中文网(www.php.cn)!
相关推荐: