今天說說Apache的優(yōu)化。為什么要優(yōu)化?因為服務器資源不夠用。資源有很多方面,但根據木桶理論,只要有一種資源不夠用,整個服務器的性能就會受到影響(所謂瓶頸)。
服務器資源
那么服務器的資源包括哪些?對于網站來說主要是CPU、TCP連接數這兩者。 CPU表現在任務數上,在Linux下使用平均負載(loadavg)來衡量??赏ㄟ^以下命令來查看(參考這篇文章):
cat /proc/loadavg
對于單CPU的服務器,loadavg高于1,表明任務隊列出現了等待,CPU忙不過來了。超過2以上就會明顯感到性能降低了。
TCP連接數可通過以下命令查看:
netstat -ant | grep :80 | wc -l
如果要實時監(jiān)控服務器資源,可參考OpenNMS項目。
注1:內存不算,低廉的價格使得網站服務器很少有因為內存不夠而down掉的。
注2:CPU%是瞬時的CPU使用率,通常無法反映出整體負載。
Apache配置命令
Apache在資源方面的配置命令主要有以下幾條。
KeepAlive 是否允許持續(xù)連接
MaxKeepAliveRequests 允許的持續(xù)連接的最大數
KeepAliveTimeout 持續(xù)連接在沒有請求多少秒后切斷
StartServers 最初啟動時啟動多少個服務器進程
MinSpareServers 空閑服務器進程的最小數
MaxSpareServers 空閑服務器進程的最大數
MaxRequestsPerChild 每個子進程處理的最大請求數
KeepAlive
前三個KeepAlive相關的指令用來設置持續(xù)連接。通常都是每個HTTP請求對應一個TCP連接,但對于一個包含許多圖片的網頁來說,客戶端會在瞬間發(fā)出多個HTTP請求,此時多次建立TCP連接會大大降低響應速度。此時通過持續(xù)連接,可以允許用戶在一個TCP連接中發(fā)出多個HTTP請求,減少TCP連接建立次數,提高響應速度。
這種情況下,應當通過access_log統(tǒng)計出連續(xù)HTTP請求出現的次數、間隔時間、訪問量,以確定 MaxKeepAliveRequests 和 KeepAliveTimeout 的值。 KeepAliveTimeout 太小發(fā)揮不了持續(xù)連接的作用;太大了,持續(xù)連接遲遲不斷,浪費TCP連接數不說,更糟糕的是系統(tǒng)中的 httpd 進程數目會因此不斷增加,使得系統(tǒng)負載升高,甚至會導致服務器失去響應。
但是在處理動態(tài)網頁請求時,由于用戶很少會瞬間請求多個動態(tài)網頁(一般都是打開頁面之后閱讀好半天才點下一頁),此時打開KeepAlive無異于浪費TCP連接數。
結論就是,放動態(tài)網頁的就 KeepAlive Off 以提高吞吐量,放靜態(tài)內容如圖片、js代碼等就 KeepAlive On 以減少TCP連接建立次數。
但一個Apache只能有一種 KeepAlive 設置,怎么辦?很簡單,弄兩臺服務器,一個專門放腳本,一個專門放圖片。
服務器進程數
再說說下面的 StartServers、MinSpareServers、MaxSpareServers。 StartServers基本不用修改,因為Apache會自動調節(jié)子進程數。 MinSpareServers和MaxSpareServers是空閑子進程數目,何為空閑子進程?假設某一時刻系統(tǒng)中共有30個httpd進程,其中一個是父進程,20個在處理請求,那么空閑子進程數就是9個。
空閑進程少了,大量的突發(fā)請求會使服務器疲于進程創(chuàng)建,降低效率;而太多反而會增加系統(tǒng)進程數,增大系統(tǒng)負載。
實際上,默認值已足夠處理一般的突發(fā)請求,所以除非是流量特別特別巨大的網站,否則不要修改這些設置。
就算流量特別特別大,也是通過負載平衡系統(tǒng)來降低每臺服務器的訪問量,不會修改這幾個值。
MaxRequestsPerChild
這個值設置子進程在處理多少個請求之后自動結束。這個選項是用來防止進程由于內存泄漏等使用內存過多。一般默認值即可。
總結
說來說去其實最重要的還是 KeepAlive 的設置,而性能調節(jié)也就是調整 KeepAlive、KeepAliveTimeout 值。
關鍵詞標簽:Apache
相關閱讀
熱門文章
ISAPI Rewrite實現IIS圖片防盜鏈
IIS6.0下配置MySQL+PHP5+Zend+phpMyAdmin
在Windows服務器上快速架設視頻編解碼器全攻略
win2000server IIS和tomcat5多站點配置
人氣排行 XAMPP配置出現403錯誤“Access forbidden!”的解決辦法 WIN2003 IIS6.0+PHP+ASP+MYSQL優(yōu)化配置 訪問網站403錯誤 Forbidden解決方法 如何從最大用戶并發(fā)數推算出系統(tǒng)最大用戶數 Server Application Unavailable的解決辦法 報錯“HTTP/1.1 400 Bad Request”的處理方法 Windows Server 2003的Web接口 http 500內部服務器錯誤的解決辦法(windows xp + IIS5.0)