错误计数器怎么读
链路质量问题的实锤在网卡计数器里。读取驱动暴露的统计字段,字段名随芯片与驱动不同,但语义基本一致:入向帧校验错指向物理层误码(光衰、网线劣化、接口脏污),接收缓冲类计数指向主机处理不及,发送载波类计数指向线缆或对端,碰撞计数在半双工链路之外出现就是双工不匹配的直接证据。读它的方法是对着语义看而不是背名字,并且必须看增量——绝对值只能说明历史上有过错误。
基本信息
| 适用平台 | Linux,需要安装 ethtool 包(多数发行版默认自带) |
|---|---|
| 权限 | 读取统计字段普通用户即可,个别驱动字段需要 root |
| 命令形式 | 指定网卡名读取驱动统计,字段名依赖芯片与驱动 |
| 关键方法 | 间隔一段时间取两次快照做差,只有正在增长的量才与当前故障相关 |
| 配合命令 | 查看速率与双工的接口信息,以及汇总层的接口错误与丢弃计数 |
| 交叉验证 | 汇总层计数反映网卡与协议栈视角,驱动计数更细,两者结合判读 |
典型使用场景
- 排查间歇性丢包与传输层重传,确认是否物理层误码导致
- 更换网线、光模块前后对比校验错增量,验证整改是否有效
- 区分丢包发生在链路还是主机:接收缓冲类计数增长说明主机侧处理不及
- 确认双工问题:碰撞计数增长但链路并非半双工,说明两端配置不匹配
- 新链路上线时建立计数器基线,日后异常有对照
- 容量评估:接收缓冲类错误增长说明中断或队列分配需要调整
读取统计与取差值
读取统计与取差值
ethtool -S eth0 | grep -Ev ': 0$' # 只看非零计数器
ethtool -S eth0 | grep -iE 'crc|error|drop|miss|carrier|collision' # 按语义筛字段
ethtool -S eth0 > /tmp/nic1.txt # 第一次快照
sleep 30 # 留一个观测窗口
ethtool -S eth0 > /tmp/nic2.txt # 第二次快照
diff /tmp/nic1.txt /tmp/nic2.txt # 出现差值说明对应计数仍在增长
ip -s link show eth0 # 汇总层错误与丢弃计数
ethtool eth0 | head -20 # 速率、双工与链路状态是否匹配计数器与指向
| 计数器示例 | 指向 | 处置方向 |
|---|---|---|
| rx_crc_errors / rx_fcs_errors | 入向帧校验错:光衰、网线劣化、接口脏污 | 清洁接口、换线或光模块,查光功率 |
| rx_length_errors / rx_frame_errors | 帧格式异常:MTU 或双工不一致、线路噪声 | 核对两端 MTU 与双工设置 |
| rx_missed_errors / rx_dropped | 网卡缓冲不足:CPU 忙、中断集中、流量突发 | 查中断与队列分配、调大环形缓冲 |
| tx_carrier_errors / tx_aborted | 发送侧物理层失败:对端、线缆或双工问题 | 查对端端口状态与线缆质量 |
| collisions / late_collisions | 半双工或双工不匹配的直接证据 | 统一为全双工并核对协商结果 |
| rx_fifo_errors | 总线带宽或环形缓冲偏小 | 核对总线带宽与缓冲配置 |
看增量而不是总量:上线多年的网卡必然有历史错误记录,绝对值高不代表现在还在出问题。隔 30 秒取两次差值,正在增长的计数才与当前故障相关。
不同驱动的字段集合差异很大:虚拟网卡通常没有物理层字段,容器内看到的部分计数只是该接口视角的数值。跨环境比对时先确认字段语义是否一致,再比较数值。