Linux dropped 测试与定位实操指南
一、快速判断是否有丢包
ping -c 100 -i 0.2 <目标IP或域名>,关注输出中的 packet loss%。持续大于 0% 需要进一步定位。mtr -n --report --report-cycles 100 <目标>;实时模式:mtr <目标>。若某一跳开始丢包、其后恢复正常,常见于中间设备限速或策略丢弃。二、查看接口层 dropped 计数
ip -s link show <iface>(如 eth0),关注 RX/TX dropped、errors、overruns。cat /proc/net/dev 与 netstat -I <iface>,查看 RX-DRP/RX-OVR 等字段。sudo ethtool -S <iface> 查看驱动私有计数,如 rx_fifo_errors、rx_missed_errors、rx_over_errors 等,定位是否为硬件/驱动队列溢出或信号错误。三、定位内核与协议栈丢包
netstat -s 或 ss -s 查看 segments retransmitted、packet receive errors 等,判断是否因链路不稳定导致 TCP 重传 或上层接收错误。sudo dropwatch -l kas 然后 sudo dropwatch -start,实时打印内核 skb 丢弃位置(如 icmp_rcv、tcp_v4_rcv),快速定位内核路径瓶颈。sysctl net.core.netdev_max_backlog(默认常见为 1000),结合 ethtool -g <iface> 观察/调整 Ring Buffer 大小,缓解 overruns。dmesg | grep conntrack;必要时调大相关阈值。sysctl -w net.ipv4.conf.all.log_martians=1,在 /var/log/messages 观察异常源地址。systemctl status firewalld;必要时在受控窗口内停止验证是否为规则丢弃。四、在流量压力下复现并量化
iperf3 -c <server> -t 30 -P 4(并发 4 流,持续 30 秒),或 nuttcp/netperf 模拟不同流量模型。ip -s link show <iface> 的 dropped 增量、ethtool -S <iface> 的关键计数、netstat -s 的 retransmits,以及 dropwatch 的内核热点。sudo tcpdump -i <iface> -nn host <对端IP> -c 2000 -w drop.pcap,用 Wireshark 分析重传、乱序、ICMP 差错等。五、常见现象与处理对照表
| 现象 | 重点命令 | 可能原因 | 处理建议 |
|---|---|---|---|
| RX-DRP 增长 | ip -s link、netstat -I |
内核/驱动缓冲不足、软中断/CPU瓶颈 | 提升软中断亲和/队列、优化应用、适度增大 netdev 缓冲 |
| RX-OVR 增长 | cat /proc/net/dev、ethtool -S |
Ring Buffer 溢出 | ethtool -g 增大环形缓冲,检查 CPU/中断负载 |
| TCP 重传升高 | netstat -s |
链路不稳定、远端拥塞 | 结合 mtr/ping 定位路径问题,优化窗口/协议参数 |
| 某跳 mtr 丢包后恢复 | mtr |
中间设备限速/策略 | 与网络侧协同核查限速、ACL、策略路由 |
| conntrack 溢出日志 | dmesg |
连接跟踪表满 | 调大 conntrack 相关阈值,优化连接生命周期 |
| rp_filter 导致丢包 | sysctl、netstat -s |
反向路径校验不匹配 | 调整 rp_filter 策略或修正路由/掩码 |
| 防火墙规则丢弃 | firewalld 状态 |
策略过严 | 临时停用验证,细化规则白名单化 |