首页/系统/Linux 内核与性能调优速查/tcpretrans TCP 重传追踪

tcpretrans TCP 重传追踪

实时打印发生重传的连接与地址, 把网络重传落到具体对端与状态。

TCP 重传追踪

实时打印发生重传的连接:发起进程、源目的地址与连接状态。内核的重传计数只能告诉你「发生了多少次」,这个工具能进一步指出「谁在重传、对端是谁、在哪个状态重传」。应用偶发超时、连接质量参差的问题,多数都要靠它落到具体对端上。

基本信息

适用平台Linux,需要内核 eBPF 支持与较高权限
输出内容时间、进程、源目地址与连接状态
配合指标系统级重传计数与连接级重传次数
输出量与重传频率成正比
使用建议先看总量级,再点名具体连接

典型使用场景

  • 应用偶发超时,确认是否伴随重传。
  • 判断重传集中在少数对端还是普遍存在。
  • 网络链路或参数调整后验证效果。
  • 区分偶发重传与持续重传,避免把正常行为当故障。
  • 与连接级重传计数对照,确认采样口径一致。

留档与归一

留档与归一
tcpretrans-bpfcc                       # 实时打印重传事件
tcpretrans-bpfcc -t                    # 带时间戳,便于与日志对齐
timeout 60 tcpretrans-bpfcc > retrans.log   # 限时留档
head -3 retrans.log                    # 先确认列序,再做字段统计
nstat -az TcpRetransSegs TcpOutSegs    # 计算重传率基线
ss -ti state established | grep -c retrans   # 连接级重传计数
awk '{print $6}' retrans.log | sort | uniq -c | sort -rn | head   # 按目的地址统计

连接状态与含义

状态含义排查方向
已建立状态重传数据传输阶段丢包或超时链路质量、拥塞与中间设备
握手阶段重传建连困难对端回包慢或链路丢包
关闭阶段重传结束过程异常对端提前消失或策略拦截
判断严重程度要用重传率而不是绝对次数:绝对次数随流量增长而增长,只有按发送总量归一后才能与其它时间或其它机器比较。
重传与丢包不是同一件事:重传说明数据最终被重新发送过,链路丢包计数只反映被丢弃的报文。两者对不上时,先确认采样窗口与统计口径是否一致,再判断链路质量。
高重传量下输出会持续刷屏,可能拖慢排查并影响终端;需要长时间观察时重定向到文件并限制时长,事后分析。

易错点

  • 高重传量下输出刷屏,未限制时长或重定向,排查效率被拖垮。
  • 把偶发重传当故障,未做速率归一,结论缺乏参照。
  • 只看重传次数不看状态,握手阶段与数据阶段的问题根因不同。
  • 不留档导致事后无法复盘对端分布。
  • 看到重传就归因网络设备,忽略了对端响应慢也会触发重传。

数据来源与参考

  • BCC 工具集文档 tcpretrans
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌