应使用 ip 命令替代 ifconfig 管理网卡:ip link show 可显示 lower/link 标志及绑定状态,ip link set 同步触发 udev 和 netlink 事件,ip -d link show 支持完整 bond/team 详情。

怎么用 ip 替代老旧的 ifconfig 管理网卡
现在几乎所有主流发行版默认不装 net-tools,ifconfig 早就不是“默认可用”了。它不显示真实队列长度、不支持多播组管理、解析不出 xdp 或 tc 相关状态——这些在排障时会直接卡住。
-
ip link show查接口状态,比ifconfig多显示LOWER_*和LINK_*标志,能一眼看出是否被systemd-networkd或NetworkManager锁定 - 启停接口别写
ifconfig eth0 up,改用ip link set eth0 up;后者会同步触发 udev 规则和 netlink 事件,避免出现“接口起来了但路由没加载”的情况 -
ifconfig对 bond/team 接口的支持是半残的,ip -d link show bond0才能看到实际 slave 状态和 mode 参数
ethtool 调整网卡参数时哪些值真有用
很多人一上来就狂调 rx/tx ring size,结果吞吐没涨反而丢包变多——环形缓冲区不是越大越好,得匹配中断聚合策略和 CPU 负载。
- 先看当前值:
ethtool -g eth0,注意Current hardware settings行,别只信Maximum supported - 调大前确认驱动是否支持:某些 Realtek 或旧 Intel 卡(如
e1000)设rx 4096会触发内核警告"ring size too large for device" - 真正影响延迟的是
ethtool -C eth0 rx-usecs 50这类中断节制参数,但要配合irqbalance关闭或绑核使用,否则 CPU 调度抖动比中断延迟还高
为什么 sysctl 改了 net.ipv4.tcp_tw_reuse 没效果
这个参数只对 *outgoing* 连接生效,且必须满足 net.ipv4.tcp_timestamps = 1,否则内核直接跳过时间戳校验逻辑,tw_reuse 形同虚设。
- 检查依赖项:
sysctl net.ipv4.tcp_timestamps必须为1,很多安全加固脚本会把它设成0 - 它不解决
TIME_WAIT占满端口的问题,只是允许复用“已关闭但时间戳更新”的连接;真要释放端口,得靠net.ipv4.ip_local_port_range扩大临时端口池 - 云环境慎开:某些负载均衡器(如 AWS NLB)对 timestamp 敏感,开启后可能被误判为连接重放
排查网卡软中断不均导致的单核打满
top 里看到 si 高但 CPU 各核负载悬殊,基本就是 RPS(Receive Packet Steering)没配或者网卡 RSS 不生效。
- 查 RSS 是否启用:
ethtool -x eth0,输出里有RSS hash key和indirection table才算真开了 - 手动绑定 IRQ 到多核:
echo "f" > /proc/irq/$(grep eth0 /proc/interrupts | awk '{print $1}' | cut -d: -f1)/smp_affinity_list(把 f 换成对应掩码) - 如果用的是 VM,确认 virtio-net 启用了
vq多队列:ethtool -l eth0的Combined值大于 1,否则再怎么调 RPS 都白搭
最常被忽略的是网卡固件版本——老版本 ixgbe 固件在开启 RPS 后反而降低吞吐,得先升级固件再调内核参数。










