温馨提示×

Linux dropped包的解决方法

小樊
36
2025-12-27 15:02:44
栏目: 智能运维

Linux dropped 包的排查与解决

一、快速定位思路

  • 明确“dropped”出现在哪里:用ip -s link showifconfigcat /proc/net/dev查看接口统计;用ethtool -S 查看驱动/硬件层计数;用ss -snetstat -s查看协议栈与应用层统计。
  • 判断是哪一跳问题:对目标执行ping -c 20traceroute,区分本地、链路、对端与中间路由问题。
  • 关联时间与负载:用dmesg -Tjournalctl -k查看内核日志;用top/vmstat观察CPU、软中断与内存压力。
  • 抓包确认:在问题接口或上下游抓包(如tcpdump -i any -nn port 80),验证报文是否到达本机、是否被内核/防火墙丢弃。
  • 云环境别忘了安全组与平台侧监控,一并核查。

二、常见根因与对应处理

现象/计数 可能原因 快速确认 处理建议
RX/TX drop 增长(ifconfig/ethtool -S 可见) 网卡Ring Buffer溢出 ethtool -S 中出现rx_fifo_errors;/proc/net/dev 的 fifo 列增长 增大环形缓冲:ethtool -G rx 4096 tx 4096;降低突发流量;优化中断/CPU亲和
RX overruns 增长 驱动队列/CPU处理不及时 ethtool -S 中 rx_overruns 增长 提升软中断处理能力(RPS/XPS)、中断绑核;升级驱动/固件
netdev_max_backlog 溢出 内核网络 backlog 队列满 /proc/net/softnet_stat 某核第2列持续增大 调大 net.core.netdev_max_backlog;优化软中断分布
nf_conntrack: table full 连接跟踪表满 dmesg grep nf_conntrack;/proc/sys/net/netfilter/nf_conntrack_*
crc_errors 增长 物理介质/线缆/光模块问题 ethtool -S grep crc;接口错包计数
length_errors 增长 MTU/巨帧不匹配 ethtool -S grep length_errors
ARP 目的MAC错误 静态ARP/ARP未及时更新 源端抓包或 ip neigh;目的端混杂抓包核对MAC 刷新ARP(ip neigh flush all);修正静态ARP
安全组/iptables DROP 策略拦截 iptables -L -n -v;云平台安全组规则 放通业务端口与协议;清理误拦截规则
协商速率/双工异常 自协商失败/对端限制 ethtool ;ethtool -r 重新自协商;必要时强制 speed/duplex(如 speed 1000 duplex full autoneg off)
驱动/固件异常 版本过旧或缺陷 ethtool -i ;dmesg 升级驱动/固件;回退稳定版本

三、关键命令速查

  • 接口与驱动层
    • 查看接口统计:ip -s link show dev eth0;cat /proc/net/dev
    • 驱动/硬件统计:ethtool -S eth0;ethtool -i eth0
    • 环形缓冲:ethtool -g eth0;ethtool -G eth0 rx 4096 tx 4096
    • 协商与流控:ethtool eth0;ethtool -r eth0;ethtool -A eth0 rx off tx off
  • 内核与协议栈
    • 软中断/backlog:cat /proc/net/softnet_stat
    • 连接跟踪:dmesg | grep nf_conntrack;cat /proc/sys/net/netfilter/nf_conntrack_max
    • 连接状态:ss -s;netstat -s
  • 连通性与路径
    • 延迟与丢包:ping 8.8.8.8 -c 20
    • 路径跳数:traceroute 8.8.8.8
  • 抓包与日志
    • 抓包:tcpdump -i eth0 -nn -vv port 80
    • 日志:dmesg -T;journalctl -k;tail /var/log/messages /var/log/syslog

四、处理顺序建议

  1. 基线采集:记录问题时间点的ip -sethtool -S/proc/net/dev/proc/net/softnet_stat、dmesg 与 top 快照。
  2. 连通性验证:对关键目标执行ping/traceroute,确认丢包发生在本地、链路还是远端。
  3. 物理与协商:核查crc_errors协商速率/双工流控,必要时更换介质/端口并重新自协商。
  4. 队列与驱动:若fifo/overrunsbacklog溢出,先增大Ring Buffernetdev_max_backlog,再做中断/RPS/XPS优化与驱动升级。
  5. 策略与连接:排查iptables/安全组nf_conntrack满导致的丢包,必要时调大表或优化超时。
  6. 应用与系统:检查业务进程状态与资源瓶颈(CPU/内存/带宽/IO),结合tcpdump定位是内核丢弃还是应用未消费。
  7. 回归验证:复测 ping/traceroute、ss -s、接口统计,确认“dropped”计数不再增长且业务恢复稳定。

五、注意事项

  • 调整Ring Buffernetdev_max_backlogRPS/XPS等参数需结合业务峰值与CPU核数,变更后持续观察。
  • 强制设置speed/duplex/autoneg前,务必与对端设备协同,避免双工不匹配引发更严重的错包与性能问题。
  • 云上实例同时检查安全组与平台侧监控告警,避免只在内网侧排查。
  • 任何变更建议先在测试环境验证,并做好回滚方案与变更记录。

0