net.core.netdev_max_backlog是内核软中断处理前的网络接收队列长度,用于暂存网卡收包速度超过协议栈处理能力时的未处理数据包,非硬件ring buffer或TCP连接队列,默认值通常为1000,溢出会导致丢包。

CentOS 7怎么修改最大接收队列

net.core.netdev_max_backlog 是什么

这里说的是内核在处理软中断之前的网络接收队列长度。先别和别的概念混在一起:它既不是网卡硬件的 ring buffer,也不是 TCP 全连接队列(somaxconn)或半连接队列(tcp_max_syn_backlog)。一旦网卡收包的速度高于协议栈的处理速度,那些来不及被取走的数据包,就会先堆在这里。这个值默认通常是 1000,放在千兆及以上链路、尤其是遇到突发流量时,确实很容易被打满,结果就是 netstat -s | grep "packet receive errors"dropped 的计数往上走。

临时修改 netdev_max_backlog 值

改完立刻生效,适合验证效果或紧急调整:

/etc/sysctl.conf 永久生效要加哪几行

编辑 /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 很可能没用,它只是整条路径中的一环:

本文转载于:https://www.php.cn/faq/2993008.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。