记录一下那天晚上的排查过程。业务日志显示接口偶发超时,监控里重传率高的时候能达到百分之五,抓包却看不出明显的异常。

排查方向其实有限,先把可能性排一排。链路存在丢包,重传是结果不是原因。还有一种是网卡或者虚拟化层有丢包。

少数情况下是接收窗口太小,触发不必要的重传。

第一件事是看重传和连接统计

ss -s

随后看单条连接的细节

ss -tin dst 对端IP

然后核对网卡丢包计数

ip -s link show eth0

末了用抓包确认重传特征

tcpdump -i eth0 -nn 'tcp[tcpflags] & tcp-retransmit != 0'

改之前先确认了最近有没有人动过配置,避免白查一遍。

这次没动代码,只在配置和运行环境上找原因。

别只看报错消失,验证要多做一步。重传率降到千分之一以下,接口超时消失,网卡计数不再增长。

重传是现象,根因可能在链路、网卡或者对端;只在本机调参数基本无效,要看两端和中间设备。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189