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

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