linux

Linux dropped原因及解决方案

小樊
40
2025-11-26 04:51:27
栏目: 智能运维

Linux dropped 的含义与定位思路

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


常见原因与对应解决方案

层级/位置 典型计数或日志 常见原因 快速检查 解决方案
网卡驱动/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. 先看接口层计数
  1. 检查驱动队列与中断负载
  1. 检查内核 backlog 队列
  1. 检查 TCP 连接队列
  1. 检查防火墙与连接跟踪
  1. 检查二层转发与 ARP
  1. 检查 UDP 与应用层
  1. 若看到内核日志 “printk messages dropped”

常用参数与命令速查


实践建议

0
看了该问题的人还看了