TCP的backlog導致的HBase超時問題排查
客戶問題場景
如上圖所示,用戶業務服務器(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