主页 > 数据库 > Windows系统下Apache性能优化,提高并发

Windows系统下Apache性能优化,提高并发

    Apache服务器配合PHP日趋成为当前网站架设的主流应用,但是在国内Linux系统毕竟没有Windows系统应用的多,因此飘易整理下在windows系统下如何优化apache的性能。

 

    在Windows系统上面按以往Unix/linux的经验配置Apache时,由于Windows的内存回收机制和进程管理的不同,会发现许多新问题。前些时单位的网站需要搬迁到新的Windows服务器,笔者在调试过程中也碰上了许多问题。新系统是Windows 2003 Server,为了满足网站高负荷的要求,在调整Apache参数时发现进程经常占用内存过多导致当机。经过不断的优化和修改参数组合,终于让服务器稳定下来,可以满足大量访问的考验和应用要求。笔者总结了调试过程中的问题和解决办法如下,以供有类似需求的网管员参考(系统环境为Windows Server 2003和apache2.2.8):

 

1、http-mpm.conf设置

 

Apache的线程数控制文件为http-mpm.conf,在conf/exrtra目录下面,要使该配置文件起作用需要在httpd.conf 中将 Include conf/extra/httpd-mpm.conf前#去掉,以使得http-mpm.conf生效。

 

在Windows系统中,起作用的是Winnt mpm段,

 

<IfModule mpm_winnt_module>
ThreadsPerChild      150
MaxRequestsPerChild    0
</IfModule>


以上是缺省的配置,一般情况下够用了,但负荷较大的网站就需要修改了,否则访问网站会变慢或没有响应。实际设置中可以根据apache-status查看apache实时连接状态,查看其中线程占用数目情况来进行相应的调整,我的服务器最后设置如下:

 

<IfModule mpm_winnt_module>
#ThreadLimit     350
ThreadsPerChild    350
MaxRequestsPerChild    10000
Win32DisableAcceptEx
</IfModule>



对于mpm_winnt,ThreadLimit的默认值是1920;对于其他mpM这个值是64。
注意:Apache在编译时内部有一个硬性的限制"ThreadLimit 20000"(对于mpm_winnt是"ThreadLimit 15000"),你不能超越这个限制。

 

ThreadsPerChlid是Apache进程的子线程数,这个指令设置了每个子进程建立的线程数。子进程在启动时建立这些线程后就不再建立新的线程了。如果使用一个类似于mpm_winnt只有一个子进程的mpM,这个数值要足够大,以便可以处理可能的请求高峰。如果使用一个类似于worker有多个子进程的mpM,每个子进程所拥有的所有线程的总数要足够大,以便可以处理可能的请求高峰。
该参数需要根据 apache-status实时的监控情况来调节,太大会导致内存增长过快,直到服务器当机,太小会导致服务器连接队列在高峰期时占满,从而导致网站连接 慢。同时我们应该修改另一个配置文件httpd-default.php中的超时设置来配合这个参数。
对于mpm_winnt,ThreadsPerChild的默认值是64;对于其他mpM是25。

 

MaxRequestsPerChild是进程的最大的请求数目,既指网站收到请求的缓存数。设置太小了会影响服务器性能,因为会占用较多cpu时间,太大了则会占用内存资源。一般大型的网站文件个数都是成千上万,所以管理员应该根据网站情况自己设定。
MaxRequestsPerChild指令设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。
在mpm_netware和mpm_winnt上的默认值是"0"。
将MaxRequestsPerChild设置成非零值有两个好处:
a)可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
b)给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
注意:对于KeepAlive链接,只有第一个请求会被计数。事实上,它改变了每个子进程限制最大链接数量的行为。

 

Win32DisableAcceptEx加入该语句是为了解决一些警告:

[warn] (OS 64)指定的网络名不再可用。 : winnt_accept: Asynchronous AcceptEx failed。

 

2、httpd-default.conf设置

 

在httpd.conf中去掉Include conf/extra/httpd-default.conf前的#以使httpd-default.php生效。我们需要调节以下参数: 提取码请登录后查看!
说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!