天天看点

TCP的backlog导致的HBase超时问题排查

TCP的backlog导致的HBase超时问题排查

如上图所示,用户业务服务器(applicationserver)上面发起http get/put请求,经过slb到达后端服务器(hbase-rest-server), 一般请求链路耗时大概100ms左右,但是会有一定的概率出现耗时很长(超过3s)。

通过在hbase-rest-server上面抓包,发现有syn重传,引起syn重传的原因是上图所示的queue满了,导致新请求的syn包丢弃。

linux的syn重传通过<code>net.ipv4.tcp_syn_retries</code>参数控制重传次数,每次重传的时间间隔为(第一次3s,第二次6s,第三次12s,每增加一次时间间隔翻倍),所以当syn包被丢弃后,第一次会经过3s后进行重传,这个3s也跟上述的超时3s比较吻合。

从上面可以看出queue满导致重传,所以适当增加queue的大小可以解决重传,queue的大小受一些参数来控制:

http server启动设置的backlog大小

net.core.somaxconn

tcp_max_syn_backlog

最终通过增加上述参数,问题解决。

继续阅读