AH00484: server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting

环境:CentOS6+Apache 2.4.25+SVN 1.8.17+PHP5.6.30

Memory 4G


具体现象为:
1)SVN 访问缓慢,甚至不响应

2) uptime

[root@localhost local]# uptime
 10:29:38 up 25 days,  1:38,  2 users,  load average: 0.07, 0.04, 0.97

3)ss -a(或netstat命令)查看连接数较多,并且WAIT_TIME比较多;

 
4)apache日志显示prefork工作模式下的并发连接数设置有问题;[mpm_prefork:error] [pid 13848] AH00161: server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting


4)重启apache服务后,SVN访问恢复正常

针对上面的现象,作了以下优化操作。操作记录如下:
1)修改apache的最大并发连接数(默认是250)

[root@wang ~]# vim /usr/local/apache/conf/extra/httpd-mpm.conf

原配置:

<IfModule mpm_prefork_module>
    StartServers             5
    MinSpareServers          5
    MaxSpareServers         10
    MaxRequestWorkers      250
    MaxConnectionsPerChild   0
</IfModule>

改动后:
<IfModule mpm_prefork_module>
      StartServers                    10
      MinSpareServers               10
      MaxSpareServers              20
      ServerLimit                      2000
     MaxRequestWorkers         1500
      MaxConnectionsPerChild    10000
</IfModule>

说明:
手动添加ServerLimit,这个才是修改apache最大并发连接数的参数设置,一定要将它放在MaxRequestWorkers的前面,并且它的值也一定要大于MaxRequestWorkers的值。如上设置,apache的最大并发连接数设置为2000个。
其他的配置:
StartServers         定服务器启动时建立的子进程数量,prefork默认为5
MinSpareServers   指定空闲子进程的最小数量,默认为5。如果当前空闲子进程数少于MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程。此参数不要设的太大。
MaxSpareServers  设置空闲子进程的最大数量,默认为10。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。此参数不要设的太大。如果你将该指令的值设置为比MinSpareServers小,Apache将会自动将其修改成"MinSpareServers+1"。
MaxRequestWorkers   最大数量的服务器进程允许开始;这个参数是这些中最为重要的一个,设定的是Apache可以同时处理的请求,是对Apache性能影响最大的参数。其缺省值150是远远不够的,如果请求总数已达到这个值(可通过ps -ef|grep http|wc -l来确认),那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下很多而HTTP访问却很慢的主要原因。虽然理论上这个值越大,可以处理的请求就越多,但Apache默认的限制不能大于256。
MaxConnectionsPerChild   每个子进程在其生存期内允许伺服的最大请求数量,默认为10000.到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。
将MaxRequestsPerChild设置成非零值有两个好处:
1.可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
2.给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。

重启apache服务(最好是先stop,然后再start)
在/usr/local/apache/conf/httpd.conf文件中添加ServerName localhost,去掉apache服务启动中的告警信息。
# /usr/local/apache/bin/apachectl stop
# /usr/local/apache/bin/apachectlstart

2)修改内核参数,解决WAIT_TIME过多的问题
添加下面四行内容
# vim /etc/sysctl.conf
......
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30

#sysctl -p

调大系统最大打开的文件数

#ulimit -n 65535

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章