CentOS下對Apache效能調試
查看Apache的並發請求數及其TCP串連狀態:
netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’
返回結果樣本:
LAST_ACK 5
SYN_RECV 30
ESTABLISHED 1597
FIN_WAIT1 51
FIN_WAIT2 504
TIME_WAIT 1057
其中的SYN_RECV表示正在等待處理的請求數;ESTABLISHED表示正常資料轉送狀態;TIME_WAIT表示處理完畢,等待逾時結束的請求數。
狀態:描述
CLOSED:無串連是活動的或進行中
LISTEN:伺服器在等待進入呼叫
SYN_RECV:一個串連請求已經到達,等待確認
SYN_SENT:應用已經開始,開啟一個串連
ESTABLISHED:正常資料轉送狀態
FIN_WAIT1:應用說它已經完成
FIN_WAIT2:另一邊已同意釋放
ITMED_WAIT:等待所有分組死掉
CLOSING:兩邊同時嘗試關閉
TIME_WAIT:另一邊已初始化一個釋放
LAST_ACK:等待所有分組死掉
查看當前工作模式 httpd -l
prefork.c 看是否有它
控制最大串連數的MaxClients ,因此可以嘗試配置為:
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 3
MaxSpareServers 5
MaxClients 50
MaxRequestsPerChild 100
</IfModule>
注意,MaxClients預設最大為250,若要超過這個值就要顯式設定ServerLimit,且ServerLimit要放在MaxClients之前,值要不小於MaxClients,不然重啟httpd時會有提示。
重 啟httpd後,通過反覆執行pgrep httpd|wc -l 來觀察串連數,可以看到串連數在達到MaxClients的設值後不再增加,但此時訪問網站也很流暢,那就不用貪心再設定更高的值了,不然以後如果網站訪 問突增不小心就會耗光伺服器記憶體,可根據以後訪問壓力趨勢及記憶體的佔用變化再逐漸調整,直到找到一個最優的設定值。
(MaxRequestsPerChild不能設定為0,可能會因記憶體泄露導致伺服器崩潰)
參考:
apache的參數設定
Apache 2.0效能最佳化-MPM的選擇與配置
如何避免apache的httpd進程佔用比較多的記憶體
對apache中並發控制參數prefork理解和調優
附:
即時檢測HTTPD串連數:
watch -n 1 -d ‘pgrep httpd|wc -l’