511遇见最近采用二级域名(bbs.511yj.com)开设了论坛,最近的试运行,发现整个域名:511yj.com 出现了堵塞假死,必须重启apache才能解决。
首先要排除一下,是否采用了页面压缩,部分服务器对压缩功能支持有限,如开启此项设置,比如HTTP压缩之gzip,等等,建议线关闭。
启用MPM模块配置文件
Apache针对不同的操作系统提供了多个不同的MPM模块,例如:mpm_beos、mpm_event、mpm_netware、mpmt_os2、mpm_prefork、mpm_winnt、mpm_worker。
Windows操作系统上默认的MPM模块是mpm_winnt,mpm_winnt模块是专门针对Windows操作系统而优化设计的MPM模块。它只创建一个单独的子进程,并在这个子进程中轮流产生多个线程来处理请求。
在对Apache的MPM模块具备一定了解后,我们就可以针对不同的MPM模块来修改Apache的最大并发连接数配置了
修改任何文件,建议做好备份。
apache\conf\httpd.conf文件中启用该配置文件
# Server-pool management (MPM specific) Include conf/extra/httpd-mpm.conf (去掉该行前面的注释符号"#")
对应的配置参数作用如下:
ThreadsPerChild:每个子进程的最大并发线程数。 MaxRequestsPerChild:每个子进程允许处理的请求总数。如果累计处理的请求数超过该值,该子进程将会结束(然后根据需要确定是否创建新的子进程),该值设为0表示不限制请求总数(子进程永不结束)。 该参数建议设为非零的值,可以带来以下两个好处: 1. 可以防止程序中可能存在的内存泄漏无限进行下去,从而耗尽内存。 2. 给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
注意:在以上涉及到统计请求数量的参数中,对于KeepAlive的连接,只有第一个请求会被计数。
修改MPM模块配置http-mpm.conf文件中的相关配置
在Apace安装目录/conf/extra目录中有一个名为httpd-mpm.conf
#由于mpm_winnt模块只会创建1个子进程,因此这里对单个子进程的参数设置就相当于对整个Apache的参数设置。
<IfModule mpm_winnt_module>
ThreadsPerChild 521 #默认值是150,推荐设置:小型网站=1000 中型网站=1000~2000 大型网站=2000~3500
MaxRequestsPerChild 3000 #推荐设置:小=10000 中或大=20000~100000
</IfModule>
再考虑一个可能,(apache 2.4)
apache 2.4 IE10浏览器会导致Apache2.4版本阻塞假死,有一种说法,用IE10登录了网站,导致了apache的卡死,这里做一个防范:
在配置文件httpd.conf中添加如下两句
AcceptFilter http none AcceptFilter https none