天天看點

apache網站通路緩慢的處理記錄

朋友在阿裡雲上開通了一台ubuntu伺服器(2G記憶體,2核CPU),用apache搭建了一個公衆号網站。

網站初期,他沒有做相應的優化,在後續公衆号推廣活動時,網站并發突增,通路十分緩慢。

登陸伺服器,具展現象為:

1)uptime檢視負載較高;

2)ss -a(或netstat指令)檢視連接配接數較多,并且WAIT_TIME比較多;

3)apache日志顯示prefork工作模式下的并發連接配接數設定有問題;[mpm_prefork:error] [pid 13848] AH00161: server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting

4)重新開機apache服務後,網站暫時通路稍快,但過一會後又十分緩慢。

針對上面的現象,幫他做了一些優化操作後,網站高并發下通路正常,速度很快。操作記錄如下:

1)修改apache的最大并發連接配接數(預設是256)

有日志報錯可知,apache采用的是預設的prefork模式(使用apache2 -l或httpd -l指令也能檢視處理 )

找到mpm_prefork.conf檔案進行連接配接數的修改(若是work模式,就修改mpm_worker.conf)

[root@wang ~]# vim /etc/apache2/mods-available/mpm_prefork.conf

<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)

在/etc/apache2/apache2.conf檔案中添加ServerName localhost,去掉apache服務啟動中的告警資訊。

[root@wang ~]# /etc/init.d/apache2 stop

[root@wang ~]# /etc/init.d/apache2 start

2)修改核心參數,解決WAIT_TIME過多的問題

添加下面四行内容

[root@wang ~]# 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

[root@wang ~]# sysctl -p

調大系統最大打開的檔案數

[root@wang ~]# ulimit -n 65535

***************當你發現自己的才華撐不起野心時,就請安靜下來學習吧***************

本文轉自散盡浮華部落格園部落格,原文連結:http://www.cnblogs.com/kevingrace/p/6211887.html,如需轉載請自行聯系原作者