首页主机资讯Linux dropped原因及解决方案

Linux dropped原因及解决方案

时间2025-11-26 10:09:04发布访客分类主机资讯浏览544
导读:Linux dropped 的含义与定位思路 在 Linux 系统中,dropped 表示“已被接收或进入处理流程但因资源不足、策略或错误等原因被丢弃”的数据包计数。不同工具/层级的含义略有差异: 接口层统计(如 ifconfig 的 R...

Linux dropped 的含义与定位思路

在 Linux 系统中,dropped 表示“已被接收或进入处理流程但因资源不足、策略或错误等原因被丢弃”的数据包计数。不同工具/层级的含义略有差异:

  • 接口层统计(如 ifconfigRX dropped):数据包已进入网卡 Ring Buffer,但在拷贝到内核内存或后续处理时因资源不足被丢弃;注意接口层还可能将部分 L2 过滤丢弃计入该计数。
  • 驱动/RX 错误(如 RX errors / RX overruns):RX errors 包含过长帧、CRC 错误、帧同步错误、FIFO 溢出、missed 等;RX overruns 表示 Ring Buffer 溢出,通常是网卡 DMA 速度快于内核处理速度导致。
  • 内核协议栈/队列(如 /proc/net/softnet_stat 第二列):表示因 netdev_max_backlog 队列溢出被丢弃的数据包(软中断来不及处理)。
  • Socket/应用层(如 netstat -ssk_drops):应用未及时取包或内核 socket 缓存不足导致的丢弃。
  • 连接跟踪(如 nf_conntrack 表满):连接跟踪条目用尽时,新建连接的数据包会被丢弃。

常见原因与对应解决方案

层级/位置 典型计数或日志 常见原因 快速检查 解决方案
网卡驱动/Ring Buffer ifconfig 的 RX dropped、ethtool -S 的 rx_missed_errors / rx_fifo_errors Ring Buffer 或 FIFO 溢出;中断/软中断处理不及时;单核软中断打满 ethtool -g eth0;ethtool -S eth0 增大 Ring Buffer(ethtool -G rx);提升软中断处理能力(见下节);均衡中断与队列
内核 backlog 队列 /proc/net/softnet_stat 第二列非零 接收速率 > 内核协议栈处理速率 cat /proc/net/softnet_stat 提高 netdev_max_backlog;优化软中断与 CPU 亲和
连接队列(TCP) netstat -s grep -i listen 出现 SYNs to LISTEN sockets dropped;ss -lnt 中 Recv-Q 长期接近 Send-Q ss -lnt;netstat -s 提高 net.core.somaxconntcp_max_syn_backlog;必要时开启 tcp_syncookies;应用及时 accept
防火墙/连接跟踪 dmesg grep nf_conntrack;iptables-save dmesg;iptables-save -t filter 扩容 nf_conntrack(如 nf_conntrack_max);优化规则/超时;必要时绕过连接跟踪
ARP/二层转发 无直接计数(现象为不通/偶发丢包) arp_ignore/arp_filter 配置不当;多网卡 ARP 应答冲突 sysctl -a grep arp_
UDP 应用 netstat -su;应用层丢包计数 校验和错误、长度错误;应用消费慢;socket 接收缓冲不足 抓包;ss -u ln;/proc/sys/net/core/rmem_default/max 修正应用协议与校验;增大 rmem;应用异步/批量消费
内核日志缓冲区 控制台提示 printk messages dropped 内核日志产生过快,缓冲区满 dmesg 调整日志级别/缓冲区;排查触发原因(硬件/驱动/异常)

以上要点与命令示例可快速定位大多数 dropped 场景并给出对应处置方向。


系统化排查步骤

  1. 先看接口层计数
  • 执行:ifconfig eth0 或 ip -s link show dev eth0,关注 RX dropped / RX errors / RX overruns
  • RX errors / overruns 增长,优先怀疑 Ring Buffer 与驱动处理能力;若仅 RX dropped 增长,可能是资源不足或策略丢弃。
  1. 检查驱动队列与中断负载
  • 查看 Ring Buffer:ethtool -g eth0;必要时增大(ethtool -G rx 8192)。
  • 查看软中断与 CPU:mpstat -P ALL 1,观察是否有 %soft 单核打满。
  • 调整软中断处理预算:sysctl -w net.core.netdev_budget=600(默认 300)。
  • 均衡中断与队列:ethtool -x eth0 查看 RSS;必要时用 ethtool -X eth0 调整队列分布。
  1. 检查内核 backlog 队列
  • cat /proc/net/softnet_stat,若某 CPU 第二列持续非零,说明 netdev_max_backlog 溢出。
  • 处置:sysctl -w net.core.netdev_max_backlog=2000(或更高,视带宽与 CPU 而定)。
  1. 检查 TCP 连接队列
  • ss -lnt:观察 Recv-Q(当前排队)与 Send-Q(最大排队,即 min(应用 backlog, somaxconn))。
  • netstat -s | grep -i listen:若出现 SYNs to LISTEN sockets dropped,提高 net.core.somaxconntcp_max_syn_backlog;必要时开启 tcp_syncookiestcp_abort_on_overflow
  1. 检查防火墙与连接跟踪
  • iptables-save -t filter:确认无意外 DROP 规则。
  • dmesg | grep nf_conntrack:若出现 “table full, dropping packet”,扩容 nf_conntrack_max 或优化规则/超时。
  1. 检查二层转发与 ARP
  • sysctl -a | egrep “arp_ignore|arp_filter”:按多网卡/NAT 场景设置合适值,避免错误应答导致后续报文被丢弃。
  1. 检查 UDP 与应用层
  • 抓包确认是否有 checksum error / length error;netstat -su 观察 packet receive errors
  • 增大 socket 接收缓冲:/proc/sys/net/core/rmem_default 与 rmem_max;应用侧采用异步/批量消费。
  1. 若看到内核日志 “printk messages dropped”
  • 调整内核日志级别与缓冲区,排查触发源(硬件/驱动/异常),避免日志拥塞掩盖根因。

常用参数与命令速查

  • 接口与驱动
    • ethtool -g eth0:查看 Ring Buffer
    • ethtool -G eth0 rx 8192:增大接收环
    • ethtool -x/-X eth0:查看/调整 RSS 队列
  • 内核网络
    • sysctl -w net.core.netdev_max_backlog=2000
    • sysctl -w net.core.netdev_budget=600
    • sysctl -w net.core.somaxconn=4096
    • sysctl -w net.ipv4.tcp_max_syn_backlog=4096
    • sysctl -w net.ipv4.tcp_syncookies=1
    • sysctl -w net.ipv4.tcp_abort_on_overflow=1
  • 连接跟踪
    • dmesg | grep nf_conntrack
    • 调整 /proc/sys/net/netfilter/nf_conntrack_max(需评估内存)
  • 统计与抓包
    • cat /proc/net/dev;cat /proc/net/softnet_stat
    • ifconfig;ip -s link;ss -lnt;netstat -s;ethtool -S
    • tcpdump -ni eth0 port < 端口> -vv

实践建议

  • 优先从“计数增长 + 资源瓶颈”定位:先看接口层与软中断,再看 backlog/队列,最后到防火墙/连接跟踪与应用层。
  • 变更参数遵循“小步快跑 + 压测验证”,避免一次性大幅调大参数导致副作用。
  • UDP 高并发场景,务必在应用侧实现异步处理与速率控制,并合理设置 rmem
  • 多核服务器务必关注 RSS/中断亲和软中断分布,避免单核成为瓶颈。
  • 若伴随内核日志拥塞,先恢复日志可见性,再回溯根因,防止“日志丢失”掩盖真实问题。

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


若转载请注明出处: Linux dropped原因及解决方案
本文地址: https://pptw.com/jishu/756439.html
Linux dropped对系统影响 ubuntu日志中的服务启动信息在哪

游客 回复需填写必要信息