CentOS dropped如何诊断
导读:CentOS dropped 的诊断与定位 一 明确含义与快速判断 在 CentOS 中,出现 dropped 多数指网络层面的数据包被丢弃(如 ifconfig/ethtool 中的 rx_dropped/tx_dropped 计数增长...
CentOS dropped 的诊断与定位
一 明确含义与快速判断
- 在 CentOS 中,出现 dropped 多数指网络层面的数据包被丢弃(如 ifconfig/ethtool 中的 rx_dropped/tx_dropped 计数增长),也可能是业务连接异常或会话中断。先区分是“网络丢包”还是“服务/会话异常”,有助于缩小排查范围。
- 快速判断:
- 查看接口是否 UP:ip link show
- 直连可达性:ping -c 4 8.8.8.8
- 域名解析:nslookup www.example.com 或 dig +short www.example.com
- 路由是否正确:ip route
- 服务端口连通:curl -I https://目标或 nc -vz 目标 端口
这些步骤能快速判断是链路、DNS、路由还是服务侧问题。
二 定位“网络 dropped”的根因
- 接口与驱动统计
- 查看接口层计数:ifconfig eth0 或 ip -s link show eth0,关注 RX/TX dropped 是否持续增长。
- 查看驱动层计数:ethtool -S eth0,关注 rx_dropped/rx_fifo_errors/rx_over_errors 等;若 rx_errors 等为零而 rx_dropped 增长,常见于内核/队列处理路径丢包(而非物理层/驱动直接丢包)。
- 某些虚拟网卡(如 virtio_net)驱动本身不提供 ethtool 统计,可查内核 sysfs:/sys/class/net/eth0/statistics/*,例如 grep . * | grep rx。
- 内核丢包热点定位
- 使用 dropwatch 观察内核丢包调用点:dropwatch -l kas → dropwatch -start,结束后 dropwatch -r;若看到如 napi_gro_receive 等函数频繁出现,多为内核 GRO/LRO、软中断或队列拥塞导致。
- 端到端连通性与路径
- 路径追踪:traceroute 8.8.8.8 或 mtr --report 持续采样,定位是本地、上游链路还是远端问题。
- 系统日志与内核消息
- 查看内核与系统日志:journalctl -n 100,/var/log/messages,/var/log/dmesg,关注 link down/up、reset、firmware、ring buffer 等关键词。
以上方法可帮助确认“网卡硬件/驱动是否丢包”还是“内核/队列/策略导致丢包”。
- 查看内核与系统日志:journalctl -n 100,/var/log/messages,/var/log/dmesg,关注 link down/up、reset、firmware、ring buffer 等关键词。
三 常见场景与处理建议
- 物理/链路与设备
- 检查网线、光模块、交换机端口与指示灯;更换网线/端口对比;确认 双工/速率 协商一致(ethtool eth0)。
- 驱动与 Ring Buffer
- 适当增大 RX/TX ring:ethtool -G eth0 rx 4096 tx 4096(以设备上限为准);若 rx_fifo_errors 同步增长,优先考虑队列/中断瓶颈或上游拥塞。
- 内核与队列
- 观察软中断与负载:sar -n SOFTIRQ 1 10、top/htop;必要时调整 RPS/XPS、中断绑定,或临时关闭 GRO/LRO 做 A/B 验证(ethtool -K eth0 gro off lro off)。
- 虚拟环境
- virtio_net 场景下,优先检查宿主机资源(CPU/中断/存储 I/O)、vSwitch/安全组/限速策略;利用 sysfs 统计确认是否为内核路径丢包。
- 防火墙与安全策略
- 核对 firewalld/iptables 规则、连接跟踪表满(conntrack)、SELinux 拒绝;必要时短暂放行策略做验证。
以上对应链路、驱动、内核、虚拟化和策略五大类高发原因。
- 核对 firewalld/iptables 规则、连接跟踪表满(conntrack)、SELinux 拒绝;必要时短暂放行策略做验证。
四 一键排查脚本示例
- 说明:将 eth0 替换为你的实际网卡名;按需执行。
#!/usr/bin/env bash
IFACE=eth0
echo "=== 接口与链路状态 ==="
ip link show $IFACE
ethtool $IFACE | egrep 'Speed|Duplex|Link detected'
echo -e "\n=== 接口层计数(ifconfig)==="
ifconfig $IFACE | egrep 'RX packets|TX packets|RX dropped|TX dropped'
echo -e "\n=== 驱动层计数(ethtool -S)==="
ethtool -S $IFACE 2>
/dev/null | egrep 'rx_dropped|rx_fifo_errors|rx_over_errors|tx_dropped'
echo -e "\n=== 内核 sysfs 统计 ==="
grep -E 'rx_|tx_' /sys/class/net/$IFACE/statistics/* 2>
/dev/null
echo -e "\n=== 连通性与解析 ==="
ping -c 4 8.8.8.8
nslookup www.example.com || dig +short www.example.com
echo -e "\n=== 路径追踪 ==="
traceroute -n 8.8.8.8
echo -e "\n=== 最近系统日志 ==="
journalctl -n 50 --since "5 minutes ago" | egrep -i 'link|eth0|drop|reset|firmware'
- 若 dropwatch 可用,可在脚本前后加入:
- dropwatch -l kas
- dropwatch -start
- (运行你的业务或压力)
- dropwatch -r
该脚本覆盖了接口、驱动、内核统计、连通性、路径与日志,能较快锁定“dropped”来源。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS dropped如何诊断
本文地址: https://pptw.com/jishu/759058.html
