PC6下载站

分类分类

apache php 配置优化

关注+2011-07-04作者:xy

2 页 prefork 工作原理

FModule>

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

  MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个值,apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比MinSpareServers小,apache会自动把其调整为MinSpareServers+ 1。如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。

   MaxRequestsPerChild设置的是每个子进程可处理的请求数。每个子进程在处理了"MaxRequestsPerChild" 个请求后将自动销毁。0意味着无限,即子进程永不销毁。虽然缺省设为0可以使每个子进程处理更多的请求,但如果设成非零值也有两点重要的好处:
  可防止意外的内存泄漏;
  在服务器负载下降的时侯会自动减少子进程数。
  因此,可根据服务器的负载来调整这个值。但也不能太小,不然系统不断的开启新的apache进程,造成资源浪费。

  MaxClients是这些指令中最为重要的一个,设定的是apache可以同时处理的请求,是对apache性能影响最大的参数。其缺省值 150是远远不够的,如果请求总数已达到这个值(可通过ps -ef|grep http|wc -l来确认),那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下很多而http访问却很慢的主要原因。系统管理员可以根据硬件配置和负载情况来动态调整这个值。虽然理论上这个值越大,可以处理的请求就越多,但apache默认的限制不能大于256。如果把这个值设为大于256,那么 apache将无法起动。事实上,256对于负载稍重的站点也是不够的。在apache 1.3中,这是个硬限制。如果要加大这个值,必须在“configure”前手工修改的源代码树下的src/include/httpd.h中查找 256,就会发现“#define hard_server_limit 256”这行。把256改为要增大的值(如4000),然后重新编译apache即可。在apache 2.0中新加入了serverlimit指令,使得无须重编译apache就可以加大maxclients。


StartServers 10
MinSpareServers 10
MaxSpareServers 15
ServerLimit 600
MaxClients 300
MaxRequestsPerChild 600


  2、worker的工作原理及配置

  相对于prefork,worker是2.0 版中全新的支持多线程和多进程混合模型的mpm。由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器。但是, worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性。这种mpm的工作方式将是apache 2.0的发展趋势。


StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0


  worker的工作原理是,由主控制进程生成"startservers"个子进程,每个子进程中包含固定的"threadsperchild"线程数,各个线程独立地处理请求。同样,为了不在请求到来时再生成线程,minsparethreads和maxsparethreads设置了最少和最多的空闲线程数;而maxclients设置了所有子进程中的线程总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。

  minsparethreads和maxsparethreads的最大缺省值分别是75和250。这两个参数对apache的性能影响并不大,可以按照实际情况相应调节。

  threadsperchild是worker mpm中与性能相关最密切的指令。threadsperchild的最大缺省值是64,如果负载较大,64也是不够的。这时要显式使用 threadlimit指令,它的最大缺省值是20000。上述两个值位于源码树server/mpm/worker/worker.c中的以下两行:


究竟是选取prefork还是worker需要具体分析,相对而言高负载下perfork拥有更高的稳定性和运行速度,而worker的资源消耗更小。也已经有人在对两种工作模式作了各种测试:http://jed.dzhope.com/read.php/298.htm

实际情况看来,worker现在还没能达到所期望的效果,性能比frefork差一些,资源消耗少一点。更可惜的是debian下worker还不能与PHP5完美结合,所以只能选用perfork了。

五、性能测试
为了获得优化有性能提高的幅度,评估优化工作的成效,需要对apache2服务器进行测试。
测试环境:
apache2和php5服务器:debian4.0、apache2.2.3、 php5.2.0-8+etch0、256M内存
在另一台机器上使用apachebench工具模拟多个浏览器向服务器的测试页面发起HTTP请求,为了减少网络带宽的影响,测试页面的返回值尽可能的小,此处只有1 byte,并为发起测试的机器和服务器组建了一个单独的局域网。每种并发测试11次,以后10次的结果为准,取平均值。
以下是测试的数据:其中并发数是指apachebench同时发起的请求个数,优化前和优化后是指平均每个请求花费的处理时间,单位毫秒


并发数
优化前(毫秒)
优化后(毫秒)

10
2.048
1.7549

50
2.1389
1.927

100
2.2084
1.9238

200
2.7689
2.5915

400
3.0523
2.797
由图中可以看出,优化后的效果还是很明显的,无论是在低并发还是高并发下,都有效的提高了请求的相应时间。
需要指出的是,尽管高负载时优化后性能提高的百分比并不明显,但在并发数400时,测试18次失败7次,而优化后测试14次失败3次。优化不仅仅提高了服务器的性能,还提高了负载的能力。

六、结论
优化可以有效的提高apache2的性能。
对于WMS等设备上的配置页面,第三部分的“apache普通配置参数”可以应用,MPM主要是以资源换取速度的优化,可以酌情调整。
对于EMS、升级系统和应用系统,可以全面优化以提高性能和高负载能力

本文导航
展开全部

相关文章

更多+相同厂商

热门推荐

  • 最新排行
  • 最热排行
  • 评分最高
排行榜

    点击查看更多

      点击查看更多

        点击查看更多

        说两句网友评论

          我要评论...
          取消