温馨提示×

为何centos dropped会发生

小樊
42
2026-09-03 03:18:29
栏目: 智能运维

在 CentOS(以及各类 Linux 系统)中,“dropped” 通常出现在网络统计里(如 ifconfigip -s linknetstat -isar -n DEV 等),表示数据包被内核丢弃(dropped packets)。下面从“是什么、为什么、怎么查、怎么解决”四方面说明。


一、什么是 CentOS 中的 dropped

以网络接口为例:

ip -s link

输出中常见字段:

  • RX(接收)
    • bytes:字节数
    • packets:收到的包数
    • errors:错误包
    • dropped:被丢弃的包
  • TX(发送)
    • 同理

dropped ≠ 丢包到网络外,而是:

包到了网卡 / 内核,但内核决定不要它。


二、CentOS 中 dropped 发生的常见原因

1️⃣ 网卡 Ring Buffer 满(最常见)

  • 网卡收到包速度 > 内核处理速度
  • 环形缓冲区(RX ring)溢出
  • 表现:RX dropped 增长

查看:

ethtool -g eth0
ethtool -S eth0 | grep -i drop

2️⃣ 内核 backlog 队列满

  • 软中断处理不过来
  • 多见于高 PPS(小包)场景

相关参数:

cat /proc/sys/net/core/netdev_max_backlog

3️⃣ 防火墙 / 策略丢弃

  • iptables / nftables
  • DROP 规则
  • 连接数限制

检查:

iptables -L -v -n

4️⃣ 连接跟踪(conntrack)表满

  • 常见于 NAT、高并发

现象:

  • RX dropped
  • dmesg 中有:
nf_conntrack: table full, dropping packet

查看:

dmesg | grep conntrack
cat /proc/sys/net/netfilter/nf_conntrack_count
cat /proc/sys/net/netfilter/nf_conntrack_max

5️⃣ 内存不足 / skb 分配失败

  • 系统内存紧张
  • 无法分配 socket buffer

查看:

dmesg | grep -i "out of memory"
free -m

6️⃣ 网卡 offload / 驱动问题

  • 驱动 bug
  • 不正确的 offload 设置

检查:

ethtool -k eth0

7️⃣ 多队列 / IRQ 不平衡

  • 单 CPU 软中断打满
  • 其他 CPU 空闲

查看:

cat /proc/interrupts
mpstat -P ALL 1

三、常见排查顺序(实用)

# 1. 看 dropped 增长
ip -s link

# 2. 看是否 conntrack 满
dmesg | grep conntrack

# 3. 看网卡统计
ethtool -S eth0 | grep -i drop

# 4. 看 CPU 软中断
mpstat -P ALL 1

# 5. 看防火墙
iptables -L -v -n

四、典型解决方案

问题 解决
Ring buffer 小 ethtool -G eth0 rx 4096
backlog 小 sysctl -w net.core.netdev_max_backlog=5000
conntrack 满 增大 nf_conntrack_max
IRQ 不均 开启 irqbalance 或手动绑核
防火墙误丢 修改 iptables 规则

五、一句话总结

CentOS 中的 dropped,本质是“内核主动或被动丢弃数据包”,最常见原因是接收速度超过处理能力(网卡、CPU、内存、防火墙)。

如果你愿意,可以贴一下:

  • ip -s link
  • ethtool -S eth0
  • dmesg

我可以帮你精准判断是哪一种 dropped

0