您的位置:首页 >CentOS 7怎么修改接口最大接收队列
发布于2026-08-12 阅读(0)
扫一扫,手机访问
不少人会遇到这种情况:net.core.rmem_max明明已经调高了,应用侧还是照样丢包。原因往往不只在这一层,接收队列实际上同时受到rmem_max(socket层)和netdev_max_backlog(设备层 ingress 队列)的共同限制。只盯着前者还不够,一旦后者被打满,receiver error 或 dropped 计数就会往上升,所以这两个参数需要一起排查,并同步调大。

net.core.rmem_max改了但应用收包还是丢?之所以接收队列的上限不能只看一个参数,是因为它实际上同时受两个彼此独立的参数约束:net.core.rmem_max(单个 socket 的接收缓冲区上限)和net.core.netdev_max_backlog(设备层 ingress 队列长度)。前者主要影响应用层,后者则负责内核从网卡驱动取包时的那段暂存队列。到了高吞吐场景,真正容易先顶满的往往是后者;一旦这里被打满,netstat -s | grep "packet receive errors" 里通常就会看到 receiver error 或 dropped 的计数开始往上走。
net.core.netdev_max_backlog?直接写入 sysctl 接口即可,无需重启网络服务:
echo 5000 > /proc/sys/net/core/netdev_max_backlog
验证是否生效:
cat /proc/sys/net/core/netdev_max_backlog
注意:该值不能超过 net.core.dev_weight 的 2 倍(默认 64),否则内核会静默截断为 dev_weight × 2。比如 dev_weight=128 时,设成 300 会被自动修正为 256。
netdev_max_backlog永久生效?写进 /etc/sysctl.conf 或独立配置文件(推荐后者,避免污染主配置):
echo "net.core.netdev_max_backlog = 5000" > /etc/sysctl.d/99-net-backlog.conf
然后加载:
sysctl --system
常见错误:只改 /etc/sysctl.conf 但没运行 sysctl -p;或用了 sysctl -p /etc/sysctl.conf 却漏掉 --system,导致 /etc/sysctl.d/ 下的文件不被加载。
net.core.rmem_max和netdev_max_backlog要一起调吗?不一定。典型组合是:
netdev_max_backlogrmem_max 和 socket 的 SO_RCVBUFnetstat -s 中哪类丢包计数上升,再针对性调整过度调高 netdev_max_backlog 会增加内存占用和中断延迟,尤其在多队列网卡上,每个 RX 队列都共享这个 backlog,不是 per-queue 设置。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9