閱讀24 返回首頁    go 阿裏雲 go 技術社區[雲棲]


TCP的backlog導致的HBase超時問題排查

客戶問題場景

tcpbacklog_jpeg

如上圖所示,用戶業務服務器(ApplicationServer)上麵發起HTTP GET/PUT請求,經過SLB到達後端服務器(HBase-Rest-Server), 一般請求鏈路耗時大概100ms左右,但是會有一定的概率出現耗時很長(超過3s)。

問題排查

1. 抓包分析

通過在HBase-REST-Server上麵抓包,發現有SYN重傳,引起SYN重傳的原因是上圖所示的Queue滿了,導致新請求的SYN包丟棄。

Linux的SYN重傳通過net.ipv4.tcp_syn_retries參數控製重傳次數,每次重傳的時間間隔為(第一次3s,第二次6s,第三次12s,每增加一次時間間隔翻倍),所以當SYN包被丟棄後,第一次會經過3s後進行重傳,這個3s也跟上述的超時3s比較吻合。

2. 參數調整

從上麵可以看出Queue滿導致重傳,所以適當增加Queue的大小可以解決重傳,Queue的大小受一些參數來控製:

  • http server啟動設置的backlog大小
  • net.core.somaxconn
  • tcp_max_syn_backlog

    最終通過增加上述參數,問題解決。

最後更新:2017-07-05 18:02:18

  上一篇:go  《財富》雜誌深度調研:阿裏巴巴新零售將重新定義實體店購物
  下一篇:go  加入阿裏雲MVP —— 讓世界聽到你