首页/系统/Linux 内核与性能调优速查/重传与超时诊断链路
网络栈调优98 条

重传与超时诊断链路

区分快速重传与 RTO 超时两类现象: 前者多为丢包/乱序快速恢复, 后者代表超时重发, 影响更大。

两类重传要分开看

TCP 重传分快速重传与 RTO 超时两种:前者由重复 ACK 触发,说明发生了丢包或乱序,但拥塞窗口里还有数据在途,恢复较快;后者是重传定时器到期后才重发,通常意味着较严重的丢包或对端长时间无响应,对吞吐影响大得多。诊断的关键是把重传按连接和时间窗拆开,而不是只看系统累计计数。

基本信息

系统级统计netstat -s 的重传段数,或 /proc/net/snmp 的 RetransSegs
单连接观察ss -tin 输出里的 retrans、cwnd、rtt
区分依据ss -i 中的重传计数与 timer 状态
采样口径累计值做区间差值,对应故障时段
配套工具nstat 观察差值,tcpdump 抓包核实

典型使用场景

  • 接口变慢但服务端 CPU 空闲,确认是否由丢包重传引起吞吐下降
  • 跨机房调用延迟抖动,区分链路丢包与应用处理慢
  • 定位少数问题连接:按对端地址筛选,把重传集中在哪几条连接上看清楚
  • 评估链路质量:用重传占比而非绝对次数衡量
  • 变更验证:调整 MTU 或拥塞控制算法后对比重传趋势

统计与抽样

统计与抽样
netstat -s | grep -i retrans                  # 系统级重传计数
ss -tin dst :443 | head -20                   # 单连接:retrans、cwnd、rtt、timer
ss -tinn state established | grep -c retrans   # 粗略统计有重传的连接数
nstat -az | grep -i retrans                    # 差值口径的持续观察

现象与归因

现象含义下一步
快速重传为主且能恢复链路存在丢包或乱序,但带宽仍可用确认丢包位置:本端、链路还是对端
RTO 超时频繁定时器到期才重发,链路质量差或对端无响应检查两端链路计数与设备告警
重传集中在少数连接这些连接的双向路径存在问题按对端地址过滤后抓包核实
重传统计抬升但吞吐正常少量随机丢包,被拥塞控制吸收记录基线即可,不必立即处置
判断重传是否异常要用占比:重传段数除以总发送段数,或与业务请求量对照。绝对次数高但流量基数很大时,可能只是正常随机丢包。
ss -ti 的 retrans 是累计值,只有用两次采样的差值才能对应到故障时段;单看一个数字无法判断当时是否在丢包。

易错点

  • 只看重传次数不看占总流量的比例,把正常随机丢包放大成故障
  • 把 RTO 超时与快速重传混为一谈,归因方向从一开始就错了
  • 用累计值直接对应故障时段,忽略了它是开机以来的总量
  • 只在本端排查,未去核对对端与中间设备的同类丢包计数

数据来源与参考

  • man ss
  • man netstat
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌