http://blog.csdn.net/oceanperfect/article/details/51064574html
一、HTTP Keep-Alive
在http早期,每一個http請求都要求打開一個tpc socket鏈接,而且使用一次以後就斷開這個tcp鏈接。
使用keep-alive能夠改善這種狀態,即在一次TCP鏈接中能夠持續發送多份數據而不會斷開鏈接。經過使用keep-alive機制,能夠減小tcp鏈接創建次數,也意味着能夠減小TIME_WAIT狀態鏈接,以此提升性能和提升httpd服務器的吞吐率(更少的tcp鏈接意味着更少的系統內核調用,socket的accept()和close()調用)。
可是,keep-alive並非免費的午飯,長時間的tcp鏈接容易致使系統資源無效佔用。配置不當的keep-alive,有時比重複利用鏈接帶來的損失還更大。因此,正確地設置keep-alive timeout時間很是重要。
keepalvie timeout
Httpd守護進程,通常都提供了keep-alive timeout時間設置參數。好比nginx的keepalive_timeout,和Apache的KeepAliveTimeout。這個keepalive_timout時間值意味着:一個http產生的tcp鏈接在傳送完最後一個響應後,還須要hold住keepalive_timeout秒後,纔開始關閉這個鏈接。
當httpd守護進程發送完一個響應後,理應立刻主動關閉相應的tcp鏈接,設置 keepalive_timeout後,httpd守護進程會想說:」再等等吧,看看瀏覽器還有沒有請求過來」,這一等,即是keepalive_timeout時間。若是守護進程在這個等待的時間裏,一直沒有收到瀏覽發過來http請求,則關閉這個http鏈接。nginx
二、TCP KEEPALIVE
連接創建以後,若是應用程序或者上層協議一直不發送數據,或者隔很長時間才發送一次數據,當連接好久沒有數據報文傳輸時如何去肯定對方還在線,究竟是掉線了仍是確實沒有數據傳輸,連接還需不須要保持,這種狀況在TCP協議設計中是須要考慮到的。
TCP協議經過一種巧妙的方式去解決這個問題,當超過一段時間以後,TCP自動發送一個數據爲空的報文給對方,若是對方迴應了這個報文,說明對方還在線,連接能夠繼續保持,若是對方沒有報文返回,而且重試了屢次以後則認爲連接丟失,沒有必要保持連接。瀏覽器
三、http keep-alive與tcp keep-alive
http keep-alive與tcp keep-alive,不是同一回事,意圖不同。http keep-alive是爲了讓tcp活得更久一點,以便在同一個鏈接上傳送多個http,提升socket的效率。而tcp keep-alive是TCP的一種檢測TCP鏈接情況的保鮮機制。tcp keep-alive保鮮定時器,支持三個系統內核配置參數:
1 echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time
2 echo 15 > /proc/sys/net/ipv4/tcp_keepalive_intvl
3 echo 5 > /proc/sys/net/ipv4/tcp_keepalive_probes
keepalive是TCP保鮮定時器,當網絡兩端創建了TCP鏈接以後,閒置idle(雙方沒有任何數據流發送往來)了tcp_keepalive_time後,服務器內核就會嘗試向客戶端發送偵測包,來判斷TCP鏈接情況(有可能客戶端崩潰、強制關閉了應用、主機不可達等等)。若是沒有收到對方的回答(ack包),則會在 tcp_keepalive_intvl後再次嘗試發送偵測包,直到收到對對方的ack,若是一直沒有收到對方的ack,一共會嘗試 tcp_keepalive_probes次,每次的間隔時間在這裏分別是15s, 30s, 45s, 60s, 75s。若是嘗試tcp_keepalive_probes,依然沒有收到對方的ack包,則會丟棄該TCP鏈接。TCP鏈接默認閒置時間是2小時,通常設置爲30分鐘足夠了。服務器
也就是說,僅當nginx的keepalive_timeout值設置高於tcp_keepalive_time,而且距此tcp鏈接傳輸的最後一個http響應,通過了tcp_keepalive_time時間以後,操做系統纔會發送偵測包來決定是否要丟棄這個TCP鏈接。通常不會出現這種狀況,除非你須要這樣作。網絡
四、圖解http的keep-alivesocket
參考連接地址:http://www.bubuko.com/infodetail-260176.htmltcp
http://www.nowamagic.net/academy/detail/23350305性能