丢包与时延定位60 条

网卡计数速查

驱动与协议栈各自记录丢弃:ethtool -S 看 rx_dropped/tx_dropped(驱动层),netstat -s 看协议层统计,先分层再归因。

计数分两个层面

主机侧的丢包计数分布在两个层面:驱动层记录网卡收发过程中的丢弃与错误,协议栈层记录更高层的统计,比如缓冲不足、队列裁剪、连接中止等。两个层面的计数含义不同,混在一起看很容易得出错误结论。正确做法是先分层定位,确认丢包发生在驱动还是协议栈,再取两次采样的差值并与业务窗口对齐,这样得出的数字才对应得上用户实际感受到的问题。

基本信息

适用平台Linux(网卡驱动统计与协议栈统计)
常用命令ethtool -S、ip -s link show、netstat -s
统计口径取两次采样差值,与业务时间窗对齐
注意点虚拟网卡与物理网卡的计数含义不同

典型使用场景

  • 业务报丢包但抓包看不出异常,需要先确认本机层是否已经在丢
  • 压测中定位瓶颈落在网卡驱动还是协议栈
  • 突发流量后核对是否出现队列丢弃
  • 长期运行主机做趋势观察,预防容量问题
  • 上云或虚拟化环境中区分虚拟机与宿主的计数
  • 为网卡参数调整提供量化前后对照

速查命令

速查命令
ethtool -S eth0 | grep -Ei 'drop|error|miss'   # 驱动层丢弃与错误
ip -s link show eth0                            # 收发统计与错误计数
netstat -s | grep -Ei 'drop|overflow|pruned'    # 协议栈层统计
# 上电累计计数要取差值: 两次采样间隔与业务窗口对齐
# 虚拟网卡的计数与宿主物理网卡不同,需分层对照

命令逐项读法

命令覆盖层面读法要点
ethtool -S网卡驱动层关注丢弃与错误类计数,突发时段看增量
ip -s link接口收发统计错误与丢弃分开看,注意方向
netstat -s协议栈层按段归类,先分缓冲与队列两类
/proc 下软中断统计收包处理路径第 2 列为丢弃计数,需按核观察
计数大多是上电以来的累计值,不看差值就等于对着历史数据下结论,采样窗口必须与业务时段对齐。
虚拟网卡的计数含义与物理网卡不同,虚拟机内看到的数字不一定对应宿主侧的真实丢弃。

易错点

  • 把累计计数当实时值:需要两次采样求差值,否则会把历史遗留问题算到当前故障上
  • 混用两个层面的计数:驱动层与协议栈层含义不同,混谈会指错方向
  • 虚拟机内直接采信网卡计数:含义与宿主不同,跨层对照才准确
  • 忽略方向:接收侧与发送侧的丢弃指向完全不同的原因,需分开统计

数据来源与参考

  • man 8 ethtool
  • procfs netstat 文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌