先來說說apache的keepalive的設定。
keepalive在apache core中的設定說明:
keep-alive擴充套件自http/1.0和http/1.1的持久鏈結特性。提供了長效的http會話,用以在同乙個tcp連線中進行多次請求。在某些情況下,這樣的方式會對包含大量的html文件造成的延時起到50%的加速作用。在apache1.2版本以後,您可以設定 keepalive on 以啟用持久鏈結。
對於http/1.0的客戶端來說,僅當客戶端指定使用的時候才會使用持久鏈結連線。此外,僅當能夠預先知道傳輸的內容長度時,才會與http/1.0的客戶端建立持久鏈結連線。這意味著那些長度不定的內容,諸如cgi輸出、ssi頁面、以及伺服器端生成的目錄列表等內容一般來說將無法使用與http/1.0客戶端建立的持久鏈結連線。而對於http/1.1的客戶端來說,如果沒有進行特殊指定,持久將是預設的連線方式。如果客戶端進行了請求,將使用分塊編碼以解決在持久鏈結裡傳送未知長度內容的問題。
apache在關閉持久連線前等待下乙個請求的秒數。一旦收到乙個請求,超時值將會被設定為timeout指令指定的秒數。
對於高負荷伺服器來說,keepalivetimeout值較大會導致一些效能方面的問題:超時值越大,與空閒客戶端保持連線的程序就越多。
maxkeepaliverequests指令限制了當啟用keepalive時,每個連線允許的請求數量。如果將此值設為"0",將不限制請求的數目。我們建議最好將此值設為乙個比較大的值,以確保最優的伺服器效能。
通過apache的設定說明,我們已經能明白keepalive的原理。在對於乙個包含許多的網頁來說, 客戶端會在瞬間發出多個http請求,此時多次建立tcp連線會大大降低響應速度。 此時通過持續連線,可以允許使用者在乙個tcp連線中發出多個http請求, 減少tcp連線建立次數,提高響應速度。我們可以通過access_log統計出連續http請求出現的次數、間隔時間、訪問量, 以確定 maxkeepaliverequests 和 keepalivetimeout 的值。 keepalivetimeout 太小發揮不了持續連線的作用;太大了,持續連線遲遲不斷, 浪費tcp連線數不說,更糟糕的是系統中的 httpd 程序數目會因此不斷增加, 使得系統負載公升高,甚至會導致伺服器失去響應。
哪麼什麼決定著我們是不是要開啟keepalive的因素就很簡單的確定出來了,就是說在使用者乙個頁面請求中是否會向伺服器發出多個http的請求。
如果是這樣的情況,怎麼辦呢?我的建議如下:
1.如果我們每乙個頁面中只有乙個請求是動態生成的,而180個(裡面可能有4個不是,不過不重要了)都是靜態的,哪麼應該將靜態與動態分開到兩個伺服器上(一台機器都可以)。將動態應用的keeplive關閉,將靜態伺服器的keeplive開啟。
2.前端前部署四層交換或七層交換或快取伺服器,這樣會讓系統的擴充套件做起來,同時也可以讓伺服器的keeplive開啟時有更好的效果。
3.應該考慮優化下他們的apache了,聽說乙個程序有高達xxm的記憶體占用,比較恐怖,在10m以內比較正常的說,不過這是乙個option了。
Apache配置優化之開啟KeepAlive
在http 1.0中和apache伺服器的一次連線只能發出一次http請求,而keepalive引數支援http 1.1版本的一次連線,多次傳輸功能,這樣就可以在一次連線中發出多個http請求。從而避免對於同乙個客戶端需要開啟不同的連線。很多請求通過同乙個 tcp連線來傳送,可以節約網路和系統資源。...
Apache常見編譯選項 轉
8.5.3 apache常見編譯選項 在上述編譯apache時使用的選項用以保證其實現常規web伺服器的一些功能,也可以在編譯時增加其他的選項來改變apache的執行狀態。這些選項主要包括以下幾種。1 prefix 目錄 指定apache的安裝目錄。2 exec prefix 目錄 指定apache...
Apache虛擬主機配置 轉
基於ip位址的虛擬主機配置 listen 80 documentroot www example1 servername www.example1.com documentroot www example2 servername www.example2.com 基於ip和多埠的虛擬主機配置 lis...