Linux dropped故障排查
导读:Linux dropped 故障排查手册 一 快速确认与分层定位 明确是否为真实丢包:对目标执行 ping 与 traceroute,观察丢包率与跳数异常;同时查看本机 IP、路由是否可达。命令示例:ping 目标IP -c 20;tra...
Linux dropped 故障排查手册
一 快速确认与分层定位
- 明确是否为真实丢包:对目标执行 ping 与 traceroute,观察丢包率与跳数异常;同时查看本机 IP、路由是否可达。命令示例:ping 目标IP -c 20;traceroute 目标IP;ip a;route -n。若路径中间设备丢包,优先处理中间网络。若本机到网关正常而远端异常,继续分层排查本机收发包路径。
- 分层定位思路:先看是否为物理/驱动层(接口状态、协商、Ring Buffer),再看内核网络栈(backlog、软中断、iptables),最后看传输层与应用层(TCP队列、分片重组、应用限流/连接满)。
二 硬件网卡与驱动层检查
- 接口与协商:确认接口为 UP,用 ethtool 检查 speed/duplex/autoneg 是否协商正确;必要时强制重协商(ethtool -r)或固定速率双工(ethtool -s eth0 speed 1000 duplex full autoneg off)。
- Ring Buffer 与驱动队列:
- 查看接口统计:cat /proc/net/dev 关注 RX dropped / RX overruns / RX errors;其中 dropped 多为已进入驱动队列后因内存/拷贝失败丢弃,overruns 多为 FIFO 溢出(CPU/中断处理不及时)。
- 查看驱动层计数:ethtool -S | grep -i rx_fifo;非零表示驱动层 FIFO 溢出。
- 调整环形缓冲:ethtool -g 查看当前/最大值;ethtool -G rx 4096 tx 4096 适当增大(结合内存与延迟权衡)。
- 直连设备侧配合:核对交换机端口 VLAN/速率/双工 一致,排除对端输入策略、CRC 等异常。
三 内核网络栈与策略层检查
- CPU 软中断与 backlog 队列:cat /proc/net/softnet_stat,每行对应一个 CPU,第二列为因 netdev_max_backlog 溢出丢弃的包;若持续增大,适当提高 net.core.netdev_max_backlog(如 2000、4000)。
- 内核丢包点位定位:
- dropwatch:dropwatch -l kas 后 start,可直观看到内核 kfree_skb 丢弃位置(如 tcp_v4_rcv、ip_rcv 等)。
- perf:perf record -g -a -e skb:kfree_skb;perf script 查看调用栈定位具体丢弃原因。
- 防火墙/安全策略:iptables-save | grep -i drop;iptables -L INPUT -nv 观察 pkts 是否递增;必要时临时关闭规则或改为 LOG 规则验证。
- 路由与反向路径过滤:
- 路由可达性:ip r get 目标IP;netstat -s | grep “dropped because of missing route” 检查因无路由丢弃。
- 反向路径过滤:cat /proc/sys/net/ipv4/conf//rp_filter;0 不验证,1 严格模式,2 松散模式;路径经过 NAT 或复杂多路径时,建议设为 0/2 并配合合理路由策略。
四 传输层与应用层检查
- TCP 三次握手与队列:
- 半连接队列:netstat -s | grep -i “SYNs to LISTEN sockets dropped” 或 dmesg | grep “TCP: drop open request”;增大 net.ipv4.tcp_max_syn_backlog。
- 全连接队列:listen backlog 与 net.core.somaxconn 共同限制;应用 backlog 过小或并发过高会出现 accept 队列溢出。
- 分片重组与 MTU:
- 分片超时/重组失败:netstat -s | egrep “fragments dropped after timeout|packet reassembles failed”;可调 net.ipv4.ipfrag_time、net.ipv4.ipfrag_high_thresh/low_thresh;若分片乱序严重,可临时将 ipfrag_max_dist=0 关闭安全距检查(需评估风险)。
- MTU/路径 MTU:ifconfig/< 接口> 查看 MTU;路径存在 ICMP black hole 时启用 TCP MTU probing(net.ipv4.tcp_mtu_probing=1/2)。
- 资源与连接数:top/vmstat 检查 CPU/内存/软中断 瓶颈;netstat -ant | awk ‘{ print $6} ’ | sort | uniq -c 观察 TIME_WAIT/CLOSE_WAIT/ESTABLISHED 分布;必要时优化应用(连接复用、合理超时、SO_REUSEADDR/SO_REUSEPORT)。
五 常用命令速查表
| 检查项 | 关键命令 | 判定要点 |
|---|---|---|
| 端到端连通 | ping 目标IP -c 20;traceroute 目标IP | 高丢包或特定跳数异常指向中间网络 |
| 接口与地址 | ip a;route -n | IP/掩码/网关与路由是否可达 |
| 协商与速率 | ethtool ;ethtool -r | speed/duplex/autoneg 一致;必要时重协商 |
| 驱动与队列 | cat /proc/net/dev;ethtool -S | RX dropped/overruns、rx_fifo 是否增长 |
| 队列容量 | cat /proc/net/softnet_stat;sysctl net.core.netdev_max_backlog | softnet_stat 第二列增长→增大 backlog |
| 内核丢包点位 | dropwatch -l kas;perf record -g -a -e skb:kfree_skb | 精确定位 kfree_skb 位置 |
| 防火墙 | iptables-save | grep drop;iptables -L -nv |
| 路由与 RPF | ip r get 目标IP;cat /proc/sys/net/ipv4/conf//rp_filter | 无路由或 RPF 策略导致丢弃 |
| 分片与 MTU | netstat -s | egrep "fragments |
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux dropped故障排查
本文地址: https://pptw.com/jishu/756435.html
