服务器配置如何调整 TCP 缓冲区大小提升网速

作者:袖梨 2026-08-26

TCP缓冲区调优需匹配带宽延迟积(BDP),公式为BDP=带宽(字节/秒)×RTT(秒),推荐设为BDP的1.2–1.5倍;必须同步调整net.core.rmem_max、net.core.wmem_max、tcp_rmem、tcp_wmem四参数,并启用tcp_window_scaling和BBR拥塞控制。

调 TCP 缓冲区不是简单“越大越好”,而是要让接收/发送窗口能撑开到匹配你实际链路的带宽延迟积(BDP),否则窗口卡在 64KB,再快的网也跑不满。

先算清楚你需要多大缓冲区

核心公式是:BDP = 带宽(字节/秒) × RTT(秒)。比如:

  1. 1Gbps 链路 → 带宽 ≈ 125MB/s;RTT = 40ms → BDP ≈ 5MB
  2. 10Gbps + 跨国 150ms → BDP ≈ 187MB

缓冲区最大值建议设为 BDP 的 1.2–1.5 倍,留点余量应对抖动。别直接套用网上“全设 16MB”的通用值——小带宽低延迟场景设太大反而浪费内存、拖慢响应。

改对这四组内核参数

必须同时调整,缺一不可:

  1. net.core.rmem_maxnet.core.wmem_max:全局硬上限,单位字节,必须 ≥ 后面 tcp_rmem/wmem 的最大值
  2. net.ipv4.tcp_rmem:三元组“最小 默认 最大”,如 4096 524288 8388608 表示最小 4KB、默认 512KB、最大 8MB
  3. net.ipv4.tcp_wmem:同上,发送侧,通常默认值可略低于接收侧(如设为 256KB)

例如针对 1Gbps + 50ms 场景,可设:

net.core.rmem_max = 12582912

net.core.wmem_max = 12582912

net.ipv4.tcp_rmem = 4096 524288 12582912

net.ipv4.tcp_wmem = 4096 262144 12582912

必须配套打开窗口缩放

TCP 头部窗口字段只有 16 位,不启用缩放就永远卡在 65535 字节(64KB)。执行:

  1. sysctl net.ipv4.tcp_window_scaling 应返回 1
  2. 若为 0,运行 sysctl -w net.ipv4.tcp_window_scaling=1 并写入 /etc/sysctl.conf
  3. 验证 SYN 握手包是否含 wscale 选项:用 tcpdump -i any 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0' 抓包看

顺手加上两个关键优化

单调缓冲区效果有限,建议一并配置:

  1. 启用 BBR 拥塞控制:比传统 cubic 更激进填满大窗口,加一行 net.ipv4.tcp_congestion_control = bbr
  2. 统一 MTU:宿主机与容器网络(如 CNI)都设为 1500 或 9000,避免分片和 PMTU 探测失败重传

改完执行 sysctl -p 生效,用 ss -i 查看活跃连接的 rcv_wnd/snd_wnd 是否已突破 64KB。

相关文章

精彩推荐