Linux dropped 技术探讨
一 概念与分层定位
二 快速定位流程
cat /proc/net/dev 与 ifconfig,关注 RX dropped、RX errors、fifo/overruns 的增长趋势,先判断是“拷贝阶段丢包”还是“硬件/驱动阶段丢包”。ethtool -S <iface> | grep rx_fifo,cat /proc/net/dev 的 fifo 字段;必要时用 ethtool -g <iface> 查看/调整 Ring Buffer 大小,用 ethtool -G <iface> rx 4096 增大接收环。ethtool <iface> 看 Speed/Duplex/Autoneg;异常时 ethtool -r <iface> 重协商,必要时 ethtool -s <iface> speed 1000 duplex full autoneg off 强制设置;同时排查 CRC errors、length_errors 等物理层计数。cat /proc/net/softnet_stat 观察每核第二列(backlog 溢出丢弃);若增长,提高 net.core.netdev_max_backlog(如 2000)。sysctl -w net.core.netdev_budget=600(默认 300)以允许软中断处理更多包;若单核 softirq 占用过高,结合中断亲和与 RSS 队列分散负载:mpstat -P ALL 1、ethtool -x/-X <iface>。net.ipv4.tcp_max_syn_backlog)、全连接队列(somaxconn 与 listen(backlog))。netstat -s | grep -i listen 或 dmesg | grep "TCP: drop open request" 发现 SYN 丢弃;netstat -ant | grep SYN_RECV | wc -l 观察半连接堆积。cat /proc/sys/net/ipv4/conf/<iface>/rp_filter,必要时 sysctl -w net.ipv4.conf.all.log_martians=1 记录异常源。iptables-save | grep -i drop、iptables -L INPUT -nv 观察命中计数是否增长。dmesg | grep conntrack 检查 conntrack 表溢出迹象。三 常见根因与对策
| 现象 | 关键指标 | 常见根因 | 对策 |
|---|---|---|---|
| 应用收 UDP 丢包 | RX dropped 增长,应用消费慢 |
socket 接收缓冲不足/应用读慢 | 增大应用层 SO_RCVBUF;系统层提高 net.core.rmem_max/rmem_default(如 25MB);必要时提高 net.core.netdev_max_backlog |
| 高速链路偶发丢包 | fifo/overruns 增长 |
Ring Buffer 小、软中断处理不及、中断集中 | ethtool -G 增大 RX Ring;netdev_budget 调大;中断亲和与 RSS 分散;netdev_max_backlog 调高 |
| 新连接建立失败 | SYNs to LISTEN sockets dropped |
半连接/全连接队列溢出、SYN Flood | 提升 tcp_max_syn_backlog、somaxconn;启用 SYN Cookies;应用及时 accept();清洗/限流恶意源 |
| 跨接口/多宿主错包 | rp_filter 丢弃 |
反向路径校验不匹配 | 依据拓扑设置 rp_filter(0/1);必要时开启 log_martians 定位 |
| 特定流量被丢弃 | iptables DROP 计数增长 |
策略过严、误匹配 | 审计并优化规则,使用更精确的匹配与日志 |
| 物理层/协商异常 | CRC errors、length_errors、协商异常 |
线缆/光模块/对端端口问题、MTU 不匹配 | 更换介质/端口;重新协商或强制速率;校验 MTU 与 PATH MTU |
| NAT/时间戳异常 | SYN 不回 ACK、连接异常 |
服务端启用 tcp_tw_recycle 与 NAT 时间戳混乱 |
禁用 tcp_tw_recycle;合理设置 tcp_max_tw_buckets 与 tcp_tw_reuse(按场景) |
| conntrack 表满 | dmesg conntrack 溢出 |
高并发短连接、表项不足 | 增大 nf_conntrack_max;优化连接复用/超时;分流出大流量到 RAW/策略路由 |
四 参数与工具清单
net.core.rmem_max/rmem_default、net.core.wmem_max/wmem_default、net.core.netdev_max_backlog、net.core.netdev_budgetnet.ipv4.tcp_max_syn_backlog、net.core.somaxconn、net.ipv4.tcp_tw_reuse、net.ipv4.tcp_tw_recycle(NAT 场景禁用)、net.ipv4.tcp_max_tw_bucketsnet.ipv4.conf.all.rp_filter、net.ipv4.conf.all.log_martians、net.netfilter.nf_conntrack_maxcat /proc/net/dev、ifconfig、ethtool -S <iface>、ethtool -g/-G <iface>、cat /proc/net/softnet_statiptables-save、iptables -L -nv、netstat -s、netstat -ant | grep SYN_RECV、dmesg | grep conntracktcpdump -i <iface> ...、dropwatch、bpftrace五 实践建议
sar -n DEV 1 60、/proc/net/dev 快照),并回滚异常变更。tcp_tw_recycle。