ip link set dev eth0 txqueuelen 5000是临时修改网卡发送队列长度最常用且安全的方式,立即生效但重启丢失;千兆网卡推荐值为1000~5000,设过大易引发tx busy或tcp重传异常。

如何用 ip link set 临时修改 txqueuelen
直接改网卡发送队列长度,最常用也最安全的方式就是 ip link set。它不依赖 NetworkManager,也不需要重启服务,改完立刻生效(但重启后丢失)。
常见错误是把值设得过大:比如对千兆网卡盲目设成 10000,结果触发驱动层 tx busy 或重传率上升,dmesg | grep tx 里能看到明显报错。
- 查当前值:
ip link show eth0 | grep txqueuelen - 设为 5000(千兆典型值):
sudo ip link set dev eth0 txqueuelen 5000 - 验证是否生效:
ip link show eth0 | grep txqueuelen,输出应含txqueuelen 5000
注意:txqueuelen 是设备层参数,和内核协议栈的 netdev_max_backlog 完全无关,别混在一起调。
为什么不能靠 nmcli 或 /etc/sysconfig/network-scripts/ 永久设置 txqueuelen
NetworkManager 会忽略 txqueuelen 配置项,哪怕你在 ifcfg-eth0 里写 TXQUEUELEN=5000,systemctl restart network 后它也不会生效——NM 重载连接时会覆盖掉这个值。
持久化必须绕过 NM,用更底层的机制:
- 写 systemd service(推荐):创建
/etc/systemd/system/txqueuelen-setter.service,ExecStart调用ip link set - 或用 NetworkManager dispatcher 脚本:在
/etc/NetworkManager/dispatcher.d/下放可执行脚本,匹配接口 up 事件 - 别用 udev rule:虽然能触发,但时机太早,网卡可能还没完全初始化,容易失败
如果你用的是 DPDK 或 XDP 应用,txqueuelen 根本不起作用,队列由用户态程序自己管理。
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
ethtool -G 调的是硬件 ring buffer,不是软件队列
很多人误以为 txqueuelen 是“网卡队列”,其实它只是内核往网卡 DMA 区提交包的缓冲深度;真正决定硬件收发能力的是网卡自身的 ring buffer,必须用 ethtool -G 调。
操作前先确认驱动支持:
- 查当前大小:
ethtool -g eth0,看Current hardware settings行 - 设 rx/tx ring 各 4096(ixgbe 常用值):
sudo ethtool -G eth0 rx 4096 tx 4096 - igb 驱动最大只支持 4096,i40e 可到 32768;超出会报
Operation not supported
这个设置重启后保留,但若你手动 modprobe -r ixgbe && modprobe ixgbe,ring size 会回到驱动默认值,需重新执行 ethtool -G。
别漏掉 netdev_max_backlog 这个软中断前的瓶颈
就算你把 txqueuelen 和 ring buffer 都调大了,如果突发流量下内核协议栈处理不过来,netstat -s | grep dropped 仍会看到 packet receive errors 上升——问题出在软中断排队阶段。
netdev_max_backlog 默认才 1000,千兆链路一有 burst 就溢出。估算公式是:带宽(Mbps) × RTT(ms) ÷ 8 的 2–3 倍(再粗略换算成包数),起步可试 5000:
- 临时改:
sudo sysctl -w net.core.netdev_max_backlog=5000 - 永久改:在
/etc/sysctl.conf加net.core.netdev_max_backlog = 5000,再sudo sysctl -p
这个参数和 RPS/RFS 开启状态强相关——开了 RPS 后必须用 mpstat -P ALL 1 看各 CPU 软中断负载是否均衡,否则调了也白调。










