网络接口队列满(如 txqueuelen 满、网卡发送/接收队列溢出、丢包)是生产环境中常见的问题,通常表现为丢包、延迟升高、吞吐量上不去。下面从排查 → 临时处理 → 根本优化三个层次说明。
ip -s link
ethtool -S eth0
重点关注:
tx_fifo_errorsrx_fifo_errorsdroppedover_errorspackets sent/receivedip link show eth0
示例:
qdisc mq state UP mode DEFAULT qlen 1000
cat /proc/softirqs
mpstat -P ALL 1
如果某 CPU 的 NET_RX 很高,说明收包处理不过来。
ip link set eth0 txqueuelen 4000
或永久:
# /etc/rc.local 或网卡配置
ip link set eth0 txqueuelen 4000
⚠️ 仅缓解,不解决根因。
ethtool -g eth0 # 查看
ethtool -G eth0 rx 4096 tx 4096
适合突发流量导致的丢包。
# 查看
cat /proc/interrupts | grep eth0
# 绑定中断到不同 CPU
echo 2 > /proc/irq/XX/smp_affinity
或开启 RPS:
echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus
# 增大 socket 缓冲区
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"
# 增大 backlog
sysctl -w net.core.netdev_max_backlog=30000
sysctl -w net.core.somaxconn=65535
确认驱动支持:
ls /sys/class/net/eth0/queues/
若只有 rx-0 tx-0,说明单队列。
队列满往往是下游处理慢:
✅ 解决思路:
| 场景 | 表现 | 解决 |
|---|---|---|
| 高并发短连接 | TX 队列满 | 增大 txqueuelen + 多队列 |
| 大流量下载 | RX 丢包 | Ring Buffer + RPS |
| CPU 满 | NET_RX 高 | 中断绑定 + RPS |
| 微服务调用链慢 | 队列持续满 | 业务限流 + 扩容 |
队列满是“结果”,不是“原因”
先查是 网卡、CPU、内核、还是业务处理慢,再决定是调参数还是改架构。
如果你能提供:
我可以给你一套针对性配置。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。