內核參數優化之1 keepalive解析

如下信息純屬虛構,切勿相信!服務器


 

  • tcp/ip協議中有一個keep-alive機制,即檢查空鏈接的時效性,當一個空鏈接持續一段時間後,就會發送一個keep-alive探測包,來探測客戶端是否還存在.
    • 若是存在,則客戶端返回一個ack報文
    • 若是存在,但構建鏈接的應用程序已經推出,則客戶端返回一個rst報文,併發送fin報文撤銷鏈接
    • 若是存在,但構建鏈接的應用程序已經崩潰,則客戶端返回一個fin報文,直接撤銷鏈接
    • 若是不響應任何報文,則顧名思義,服務器就會主動撤銷鏈接.不過在撤銷鏈接前,服務器會發送多少個探測包,每一個探測包間隔多少秒呢?就看下面的參數了
  • net.ipv4.tcp_keepalive_time
    • 意思是一個已知鏈接空閒了多久,默認時間是7200秒,即2小時,這個值是很大的,由於若是對方空鏈接攻擊,就很噁心了,因此建議修改成1800秒
  • net.ipv4.tcp_keepalive_probes
    • 意思就是tcp在空閒時間結束後,發送幾個探測報,默認是9個,根據狀況,爲了釋放資源,咱們應該縮短這個次數,因此建議5次如下,好比3次
  • net.ipv4.tcp_keepalive_intvl
    • 意思是每一個探測報文的間隔時間,默認是75秒,這裏也建議縮短,由於間隔時間是75秒*發送的報文次數=無活動鏈接到撤銷鏈接所用的時間,因此建議20秒.

OK, 通過這三個參數的調整,如今的tcp/ip檢測空鏈接的效果是
1. 每個空鏈接能夠保持1800秒(30分鐘)
2. 當空閒時間結束後,服務器會每20秒發送一個探測報文,共計發送3個
3. 若是依然沒有活動,則斷開.因此空鏈接總佔用時間爲31分鐘併發

相關文章
相關標籤/搜索