Linux dropped怎么分析
导读:Linux dropped 分析与定位 一、先明确 dropped 的统计含义 在接口层,dropped 来自内核的 /proc/net/dev,其值为 rx_dropped + rx_missed_errors 的累计,表示“设备层已接...
Linux dropped 分析与定位
一、先明确 dropped 的统计含义
- 在接口层,dropped 来自内核的 /proc/net/dev,其值为 rx_dropped + rx_missed_errors 的累计,表示“设备层已接收但被内核/驱动层丢弃”的报文数量;它不等同于物理链路错误。工具如 ifconfig、netstat -i 的 RX-DRP 列本质都读取该文件。
- 在协议栈层,可用 netstat -s 查看各协议(IP、ICMP、TCP、UDP)的收发与丢弃统计,用于判断是否为协议处理阶段(如分片重组、ICMP 限流等)导致的丢包。
- 在更细的维度上,还需区分 RX dropped 与 RX overruns:前者多为内核/内存原因导致拷贝失败,后者多为 Ring Buffer 溢出(驱动队列满)导致,常与中断/软中断处理不及时相关。
二、快速定位流程
- 确认是否在增长
- 接口层:watch -d ‘cat /proc/net/dev | egrep “eth|ens”’ 或 ifconfig/ethtool -S 观察 RX-DRP/RX-OVR 是否持续递增。
- 协议栈层:watch -d ‘netstat -s | egrep “fragments dropped|reassembles failed|packet headers predicted|TCPTimeouts|TCPSynRetrans”’ 观察是否有协议层异常计数增长。
- 判断丢包位置
- 若 RX-DRP 增长而 RX-OVR 不增长:更可能是内核/驱动内存不足、拷贝失败等导致的 RX dropped。
- 若 RX-OVR 增长明显:多为 Ring Buffer 溢出,常见于中断/软中断处理不过来(CPU 绑定不均、软中断风暴等)。
- 若 netstat -s 中分片重组相关计数增长:考虑 MTU/分片 问题(如 ICMP blackhole、分片重组超时/失败)。
- 若 netstat -s 中 TCP 超时/重传增长:多为链路拥塞或远端问题,可结合端到端探测进一步确认。
- 定位具体丢弃点
- 使用 dropwatch 观察内核丢包调用栈(如 kfree_skb 位置),快速判断是 netfilter、队列、驱动还是其他路径丢弃。
- 使用 bpf/nettrace 在内核 hook 点追踪丢包位置与上下文,辅助定位到具体函数/规则。
- 抓包与端到端验证
- 在问题接口抓包:tcpdump -ni eth0 -ttt greater 1532(排查 MTU 超限大包);必要时配合 Wireshark/tshark 分析重传、乱序、ICMP 等。
- 端到端质量:mtr/traceroute 观察各跳丢包与时延,注意中间设备对 ICMP 限流可能导致“假丢包”现象。
三、常见根因与对应处理
| 现象特征 | 可能根因 | 快速验证 | 处理建议 |
|---|---|---|---|
| RX-OVR 增长 | Ring Buffer 溢出、中断/软中断处理不及时 | ethtool -S 看 rx_fifo/overruns;sar -n SOFTIRQ/硬中断 | 增大 Ring Buffer(ethtool -G rx);中断/CPU 亲和与队列优化;降低软中断负载 |
| RX-DRP 增长、RX-OVR 不增长 | 内核/驱动内存不足、拷贝失败 | dropwatch/nettrace 定位 kfree_skb 位置 | 调大网络内存:net.core.rmem_default/wmem_default、net.core.rmem_max/wmem_max |
| netstat -s 分片重组失败/超时 | MTU 不匹配、分片重组问题 | ping -M do -s ;netstat -s | 调整 MTU;启用 TCP MTU Probe;必要时调大 ipfrag_time/high_thresh |
| nf_hook_slow 相关丢包 | iptables/nftables 规则丢弃 | dropwatch/nettrace 显示 nf_hook_slow | 审计规则(iptables -S/-L -v -n),临时停用规则验证 |
| TCP 超时/重传、SYN 重试 | 链路拥塞、远端异常、半开连接过多 | netstat -s | 扩容带宽/优化队列;调大 tcp_max_syn_backlog;优化应用并发与超时 |
| 连接跟踪满 | nf_conntrack 表项不足 | sysctl net.netfilter.nf_conntrack_max;conntrack -L | 增大 nf_conntrack_max;缩短相关超时;优化连接生命周期 |
上述处理要点涉及的命令与参数示例:ethtool -G/ethtool -S、dropwatch/nettrace、netstat -s、tcpdump、sysctl 调整网络与连接跟踪参数等。
四、常用命令速查
-
接口与驱动层
- cat /proc/net/dev;ifconfig/ethtool -S ;ethtool -g (查看/调整 Ring Buffer);ethtool -k (查看 offload 开关)。
-
协议栈与丢包点
- netstat -s(协议层统计);dropwatch(内核丢包栈);nettrace --drop(BPF 追踪丢包);tcpdump -ni -ttt greater 1532(抓大包/MTU 问题)。
-
连接跟踪与会话
- sysctl net.netfilter.nf_conntrack_max;conntrack -L/-C(查看/统计 conntrack 表)。
-
系统日志
- tail -f /var/log/{ syslog,messages} ;journalctl -k -f;grep/awk 过滤关键字(如 error、drop、denied)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux dropped怎么分析
本文地址: https://pptw.com/jishu/749860.html
