最常用且见效快的方法是用ethtool -G精准调整RX/TX环形缓冲区大小,需先通过ifconfig和ethtool -S识别丢包类型,再结合硬件上限(如Pre-set maximums)合理设置RX值,避免盲目调大。

直接用 ethtool -G 调整网卡的 RX/TX 环形缓冲区大小,是缓解高并发丢包最常用且见效快的方法。关键不是盲目调大,而是结合丢包类型和硬件限制精准操作。
看懂 ifconfig 和 ethtool -S 中的丢包信号
先确认丢包是否来自环形缓冲区不足:
- ifconfig 输出中的 RX overruns 持续增长 → 表明数据包还没进环形缓冲区,就在网卡 FIFO 层被丢弃,说明 RX 缓冲区太小或 CPU 中断处理不过来
- ethtool -S eth0 | grep -E "drop|overrun|fifo" 中 rx_over_errors 或 rx_fifo_errors 上升 → 同样指向硬件接收缓冲区溢出
- RX dropped 增长明显但 overruns 稳定 → 问题更可能在内核协议栈或 socket buffer,环形缓冲区调整效果有限
查当前设置并确认可调范围
运行命令查看当前值和硬件上限:
ethtool -g eth0
输出类似:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
Pre-set maximums: RX: 4096 TX: 4096
Current hardware settings: RX: 256 TX: 256
注意 Pre-set maximums 的数值——这是网卡驱动允许的最大值,不能超过它。常见 Intel 千兆网卡上限为 4096,部分万兆卡可达 8192 或更高。
用 ethtool -G 安全调整缓冲区
只调 RX(接收)通常就能解决大部分丢包,TX(发送)一般影响较小,可暂不调整:
- 将 RX 缓冲区从默认 256 提至 2048:
ethtool -G eth0 rx 2048 - 若仍有丢包且硬件支持,再试 4096:
ethtool -G eth0 rx 4096 - 调整后立即验证:
ethtool -g eth0 确认生效;
watch -n1 'ethtool -S eth0 | grep -E "rx_.*over|rx_dropped"' 观察计数器是否停止上涨
配合检查与长期稳定建议
单靠调大 ring buffer 不一定能根治问题,还需同步关注:
- CPU 软中断压力:运行 top -H 或 cat /proc/interrupts | grep eth0,看对应 CPU 是否持续满载;过载时需开启 RPS 或绑定中断到多核
- 驱动兼容性:老旧驱动可能不支持大 buffer,用 ethtool -i eth0 查驱动版本,必要时升级 kernel 或固件
- 持久化配置:ethtool 命令重启失效,可写入 systemd service、network script 或 /etc/rc.local(推荐用 udev rule 或 network-manager 配置文件方式固化)

















