HTTP服務的Keep-Alive設置問題

和apache一樣,很多http服務都提供了Keep-Alive功能,如nginx配置中的keepalive_timeout。

至於什麼是Keep-Alive,簡單的說:

Keep-Alive會在server上保持client過來所建立的鏈接,當client下一次再連到這臺server時,不需要重新建立鏈接,而繼續使用之前的鏈接。

具體這裏不再介紹,可自行google。這裏直接說一下Keep-Alive該如何設置的問題。

因爲它會保持打開的鏈接,所以適用於同一client短時間內需要反覆鏈接的web情況,例如:

  1. 打開一個頁面時,該頁面鏈接了n個圖片或n個js腳本或n個css等,並且這些東西都在一臺server上;
  2. 需要用戶頻繁的在網站中轉悠,這點點那點點;
前者可設置timeout時間短一些,例如5秒;後者可以稍長一些,例如60秒。

那麼不適用Keep-Alive的情況呢?
除了以上情況的相反情況外,對於一些特殊情況也可以off了它。例如高併發情況下。
爲什麼?因爲太多的client請求過來時,server的鏈接數是有限的,如果爲一部分用戶保持了太多的鏈接,那麼其他用戶就無法正常鏈接上。

所以要讓通信完畢的鏈接儘快釋放,給其他client騰出資源。

雖然這樣頻繁地建立鏈接會消耗一定的CPU和內存,但是以現在機器的性能,前端服務器的瓶頸往往不在這塊兒,而在鏈接數和I/O等。

所以,通常情況下web服務器你大可不必開啓Keep-Alive,或者設置較低的值。這樣可以充分發揮機器性能,提高併發。除非你的CPU和內存比較緊張。

此外,後端server和server之間的通信如果使用的也是http,那麼此時應該開啓Keep-Alive,你說是麼:)

-----------------------------------------我是分割線----------------------------------------------

擴展閱讀:

http://blog.netzhou.net/?p=141

http://mylinux.5d6d.net/thread-919-1-1.html

發佈了149 篇原創文章 · 獲贊 75 · 訪問量 64萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章