首页主机资讯Linux dropped案例分析

Linux dropped案例分析

时间2025-11-28 11:29:04发布访客分类主机资讯浏览211
导读:Linux dropped 案例分析精选 案例一 UDP 大流量下接收端 dropped 与 overruns 并存 现象:使用 iperf3 udp 打流时,接收端吞吐仅 600+ Mbps,出现 rx error 与 overruns...

Linux dropped 案例分析精选

案例一 UDP 大流量下接收端 dropped 与 overruns 并存

  • 现象:使用 iperf3 udp 打流时,接收端吞吐仅 600+ Mbps,出现 rx erroroverruns 增长,设定 1000 Mbps/5 s 未达成。
  • 初步定位:
    • 发送端 ifconfig 无错误;接收端 ifconfig 显示 RX errorsoverruns 增长。
    • UDP 统计中 InErrorsRcvbufErrors 近似相等,指向接收端缓存/缓冲不足。
  • 深入辨析:
    • RX errors:总接收错误(过长帧、CRC、帧对齐等)。
    • RX dropped:已进入驱动/协议栈但因资源不足等原因未进一步处理(如 socket buffer 不足)。
    • RX overruns/fifo:网卡侧 Ring BufferNIC 内部 FIFO 来不及消费被丢弃,常在 /proc/net/dev 的 fifo 字段或 ifconfig 的 overruns 体现。
  • 处置与效果:
    • 调大 Ring Buffer(ethtool -G rx/tx),效果有限甚至劣化(CPU/中断处理跟不上时放大排队并不能治本)。
    • 调大 socket buffer(如 rmem_default/rmem_max),有明显改善但仍有丢包。
    • 将网卡中断分散到多核(设置 smp_affinity,并停用或排除 irqbalance 干扰),丢包消失、吞吐恢复。
  • 要点:多核负载不均导致软中断拥塞时,单纯加大缓存往往收益有限,需结合中断亲和与 RPS/RFS 等手段做整体调优。

案例二 半连接队列溢出导致 TCP 新连接被丢弃

  • 现象:高并发短连接时,部分客户端 SYN 不响应,服务端日志/内核提示新 SYN 被丢弃。
  • 定位方法:
    • 内核日志检索:dmesg | grep “TCP: drop open request from”
    • 连接状态统计:netstat -ant | grep SYN_RECV | wc -l,若数值异常偏大,疑似 SYN Floodtcp_max_syn_backlog 过小。
  • 处置建议:
    • 临时放大 net.ipv4.tcp_max_syn_backlognet.core.somaxconn,并结合业务压测确定合理值。
    • 启用 syncookies(net.ipv4.tcp_syncookies=1)缓解洪泛冲击。
    • 结合防火墙/清洗设备做流量治理,避免应用层被压垮。
  • 要点:SYN 丢弃多发生在握手早期队列阶段,优先核查队列容量与连接洪泛特征。

案例三 iptables 与连接跟踪导致的丢包

  • 现象:访问间歇性失败或时延抖动,应用日志无明显错误,但服务不稳定。
  • 排查路径:
    • 规则面:
      • 列出 DROP/REJECT 规则:iptables-save | grep -i drop
      • 观察命中计数:iptables -L INPUT -nv,若某条 DROP 规则 pkts 持续增长,即为可疑点。
    • 内核面:
      • 追踪内核丢包点:perf record -g -a -e skb:kfree_skb & & perf script
      • 或用 dropwatch 观察丢包栈:dropwatch -l kas(如频繁出现在 nf_hook_slow,多为 Netfilter 丢包)。
    • 连接跟踪:
      • 检查是否 conntrack 表满:对比 nf_conntrack_countnf_conntrack_max
      • 若接近上限,适当提升 net.netfilter.nf_conntrack_max 并优化长连接/短连接生命周期。
  • 处置建议:清理无效规则、合并冗余规则、对大流量场景合理调大 conntrack 上限并启用分片/尽早释放策略。
  • 要点:防火墙与连接跟踪是常见“静默丢包”来源,需同时核查规则命中与内核丢包栈。

案例四 MTU 配置错误引发“能握手但收不到数据”

  • 现象:hping3 -S 三次握手正常,但 curl 访问超时;抓包可见握手成功但后续数据不见。
  • 定位过程:
    • 接口统计:netstat -i 显示 RX-DRP 增长;
    • 发现接口 MTU=100(异常偏小,以太网通常为 1500);
    • MTU 调回 1500 后,HTTP 访问恢复正常。
  • 成因解释:握手报文小可过,但携带数据的报文因 DF 或路径 MTU 限制被丢弃/无法分片,导致“看似通、实不通”。
  • 要点:遇到“握手 OK 但数据不通”,优先核查 MTUDF 标志与路径 PMTU 设置。

案例五 硬件与驱动层问题导致 dropped

  • 典型诱因与排查:
    • 速率/双工协商异常:ethtool 查看;必要时 ethtool -r 重协商,或强制设置 speed/duplex/autoneg
    • 流控(Pause)异常:
      • 统计:ethtool -S | grep control(观察 rx_flow_control_xon/off);
      • 配置:ethtool -A rx off tx off(按需关闭/开启)。
    • 物理层错误:ethtool -S | grep crc_errors,优先排查网线、光模块、端口接触与规格匹配。
    • 报文长度错误:ethtool -S | grep length_errors,核对 MTU 与巨帧支持。
    • Ring Buffer 溢出:/proc/net/dev 的 fifo 增长或 ethtool -Srx_fifo_errors,可调 ethtool -G 增大环形缓冲并配合中断亲和/多队列优化。
  • 要点:硬件/驱动侧问题往往伴随 CRC/长度/协商/流控 等计数异常,先硬件后软件、由外而内逐层确认。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Linux dropped案例分析
本文地址: https://pptw.com/jishu/758854.html
Linux dropped预防措施 Linux dropped解决方案

游客 回复需填写必要信息