netstat -s 直接输出各协议累计收发总量和错误计数,涵盖TCP/UDP/ICMP/IP等协议的连接建立、重传、丢包、校验错误等统计,但为自启动以来的累计值,需对比差值计算速率;字段如segments retransmitted表重传总量,非实时率,datagrams received指本机接收,forwarded仅在IP转发启用时有效。

用 netstat -s 查各协议收发总量和错误计数
直接运行 netstat -s 会输出 TCP、UDP、ICMP、IPv4、IPv6 等所有协议的汇总统计,包括连接建立/关闭次数、重传数、接收/丢弃包数、校验和错误等。它不按接口拆分,但能快速判断是否某类协议异常(比如 TCP 重传率突增、UDP 接收丢包多)。注意:该命令输出是自系统启动以来的累计值,不是实时速率。
常见误判点:
- 看到
segments retransmitted数值大,不等于当前有重传——得对比前后两次差值再除以时间,才算重传率 -
datagrams received和datagrams forwarded容易混淆:前者是本机接收,后者是作为路由器转发出去的包,仅在开启 IP 转发时有意义 - 部分字段如
failed ports(端口分配失败)在高并发短连接场景下升高,说明net.ipv4.ip_local_port_range可能过窄
用 sar -n EDEV 查接口级协议错误分布
sar -n EDEV 是唯一能将错误按接口 + 协议维度拆开的工具。它显示每个网卡上 IPv4/IPv6/TCP/UDP 的输入错误、输出错误、丢包、校验失败等,单位是每秒计数(非累计),适合定位具体哪块网卡在哪类协议上出问题。
执行前确认:
- 必须已启用 sysstat 数据收集(
systemctl enable --now sysstat),否则历史数据为空 -
sar -n EDEV 1 3比sar -n DEV 1 3多一层错误归因——后者只给流量,前者告诉你“为什么流量没成功” - 若输出中
rxerr/s或txerr/s非零,优先检查物理层(网线、交换机端口、驱动兼容性),而非应用层
用 ip -s link show 快速核对底层帧级计数
ip -s link show eth0 输出的是链路层(Ethernet)原始帧统计,含 RX/TX 的 bytes、packets、errors、dropped、overruns。这里的 errors 对应物理层或驱动层问题(如 CRC 错、缓冲区溢出),而 dropped 通常是内核 netfilter 或 socket 接收队列满导致。
关键区别:
-
ip -s link的errors和sar -n EDEV的rxerr/s不重复:前者是帧错误,后者是 IP 层及以上协议错误 - 如果
ip -s link中overruns持续增长,说明网卡 ring buffer 不够,需调大ethtool -G eth0 rx 4096 -
dropped高但errors为 0,大概率是软中断处理不过来(cat /proc/net/softnet_stat第二列非零)或 socket backlog 设置过小
别依赖 netstat -i 做协议负载分析
netstat -i 只显示每个接口的总收发包数、错误数、丢包数,不区分协议,也不提供速率。它的 errs 字段其实是 ip -s link 中 errors 和 dropped 的混合,无法判断问题发生在哪一层。现代系统更推荐用 ip -s link 替代它——响应更快、字段更明确、无需额外安装 net-tools。
实际排查时容易忽略的一点:协议负载 ≠ 接口负载。一个接口流量平稳,但 TCP 重传率飙升,说明问题在传输层拥塞控制或远端丢包;反过来,sar -n DEV 显示 rxpck/s 很高,但 sar -n EDEV 里 rxerr/s 为 0,那大概率是合法业务流量,不是故障。











