nmcli 本身不能直接设置 txqueuelen,需先用 nmcli 确保网卡由 networkmanager 管理并处于活跃状态,再通过 ip link 临时配置,最后借助 networkmanager dispatcher 脚本或 systemd service 实现开机持久化。

nmcli 本身不能直接设置网卡的 txqueuelen(传输队列长度),因为该参数属于内核网络设备底层属性,由 ip link 或 ifconfig 控制,NetworkManager(及其命令行工具 nmcli)不暴露此配置项。但你可以通过 nmcli 配合其他工具协同完成——先用 nmcli 确保连接就绪、避免冲突,再用标准命令安全修改 txqueuelen,并实现开机持久化。
确认网卡已由 NetworkManager 管理且处于活跃状态
这是前提:若网卡被 ifconfig 直接 down 或未被 NM 管理,后续设置可能被覆盖或失效。
- 查看设备状态:
nmcli device status - 查看连接是否 active:
nmcli connection show --active | grep ethernet - 若网卡(如 eth0)显示为
unmanaged,需先交由 NM 接管:
nmcli device set eth0 managed yes
用 ip link 临时设置 txqueuelen(推荐方式)ifconfig 已逐步弃用,ip link 是现代标准:
- 查看当前值:
ip link show eth0 | grep "txqueuelen" - 设置为 5000(适合千兆及以上链路):
sudo ip link set dev eth0 txqueuelen 5000 - 注意:该设置在重启或 NetworkManager 重载连接后会丢失,仅用于验证效果。
让 txqueuelen 开机生效(持久化方案)
NetworkManager 不读取 txqueuelen,但支持通过 connection.interface-name 和 match 规则触发自定义脚本:
-
方法一(推荐,兼容 RHEL/CentOS/Fedora):
在连接配置中添加interface-name并配合nmcli+systemd:
nmcli connection modify eth0 connection.interface-name eth0
创建/etc/NetworkManager/dispatcher.d/99-txqueuelen:#!/bin/bash if [ "$1" = "eth0" ] && [ "$2" = "up" ]; then ip link set dev eth0 txqueuelen 5000 2>/dev/null fi赋予执行权限:
sudo chmod +x /etc/NetworkManager/dispatcher.d/99-txqueuelen
Browser Setup (No-Root Linux)下载在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
-
方法二(通用,适用于所有发行版):
将命令写入 systemd service,在 network-online.target 之后运行:# /etc/systemd/system/txqueuelen-eth0.service [Unit] Description=Set txqueuelen for eth0 After=network-online.target Wants=network-online.target [Service] Type=oneshot ExecStart=/sbin/ip link set dev eth0 txqueuelen 5000 RemainAfterExit=yes [Install] WantedBy=multi-user.target
启用服务:
sudo systemctl enable --now txqueuelen-eth0.service
配合高吞吐场景的注意事项
增大 txqueuelen 对突发流量有帮助,但需结合其他调优才有效:
- 检查网卡多队列是否启用:
ethtool -l eth0,若支持,建议开启 RSS 并绑定 CPU:
echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus(示例) - 避免过度增大:一般 1000–5000 足够;超过 10000 可能增加延迟,尤其在小包密集场景
- 验证效果:用
iperf3测试前后吞吐变化,并观察tx_dropped计数(ip -s link show eth0)是否下降
不复杂但容易忽略










