发布于2026-08-16 阅读(0)
扫一扫,手机访问
net.core.netdev_max_backlog是内核软中断处理前的网络接收队列长度,用于暂存网卡收包速度超过协议栈处理能力时的未处理数据包,非硬件ring buffer或TCP连接队列,默认值通常为1000,溢出会导致丢包。

这里说的是内核在处理软中断之前的网络接收队列长度。先别和别的概念混在一起:它既不是网卡硬件的 ring buffer,也不是 TCP 全连接队列(somaxconn)或半连接队列(tcp_max_syn_backlog)。一旦网卡收包的速度高于协议栈的处理速度,那些来不及被取走的数据包,就会先堆在这里。这个值默认通常是 1000,放在千兆及以上链路、尤其是遇到突发流量时,确实很容易被打满,结果就是 netstat -s | grep "packet receive errors" 里 dropped 的计数往上走。
改完立刻生效,适合验证效果或紧急调整:
sudo sysctl -w net.core.netdev_max_backlog=5000(常见千兆链路可先试这个值)sysctl net.core.netdev_max_backlog 应返回 5000ethtool -G 调整硬件 rx ring,也不影响应用层 listen() 的 backlog编辑 /etc/sysctl.conf,追加这一行(不要多空格、不要注释、不要带引号):
net.core.netdev_max_backlog = 5000
接着执行 sudo sysctl -p 让配置生效。要是这一步报出 error: "net.core.netdev_max_backlog" is an unknown key,通常就意味着当前内核里的相关模块被裁剪掉了,或者处于禁用状态——这种情况并不常见。遇到这种提示,需要进一步检查 zcat /proc/config.gz | grep NETFILTER,或者重新编译内核并启用 CONFIG_NETFILTER 相关选项。
单独调大 netdev_max_backlog 很可能没用,它只是整条路径中的一环:
ethtool -G eth0 rx 4096(驱动支持前提下)/sys/class/net/eth0/queues/rx-*/rps_cpus 设置合理,否则软中断集中在单 CPU 导致队列持续积压netdev_max_backlog 路径,此时该参数无效,应查厂商文档看是否需配置 vCPU 绑定或启用 XDP
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9