朋友在阿裡雲上開通了一台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,如需轉載請自行聯系原作者