提升Linux网络吞吐的关键是匹配BDP调大TCP缓冲区、启用BBR拥塞控制、增大连接队列、优化网卡中断处理;需同步调整tcp_rmem/wmem、rmem_max/wmem_max、somaxconn、netdev_max_backlog等参数,并启用RPS与多队列网卡。
提升 Linux 网络吞吐的关键,在于让 TCP 堆栈能“撑开”足够大的窗口、快速处理连接、并高效利用带宽延迟积(BDP)。默认参数在高带宽或高延迟场景下极易卡死性能,比如 10Gbps + 50ms RTT 链路,理论 BDP 约 62.5MB,而默认接收缓冲区上限仅 256KB,窗口根本打不开——吞吐自然上不去。
缓冲区是 TCP 窗口的物理基础。过小会限制单连接最大吞吐;过大则浪费内存。需同时调整协议层和系统层限制:
4096 65536 134217728(即 4KB / 64KB / 128MB),第三值应 ≥ 2×BDP134217728(128MB)sysctl -p 生效后,可用 ss -i 查看某连接实际通告窗口是否已扩大CUBIC 是传统默认算法,依赖丢包触发降速,在高带宽长链路上易激进或保守;BBR 则基于带宽和 RTT 主动建模,不依赖丢包,更适合跨机房、专线等场景:
cat /proc/sys/net/ipv4/tcp_available_congestion_control 中含 bbr
echo "net.ipv4.tcp_congestion_control = bbr" >> /etc/sysctl.d/99-bbr.conf
当突发连接请求超过队列容量,内核会静默丢弃 SYN 或已完成三次握手的连接,表现为客户端“连接超时”而非拒绝,netstat -s | grep "listen drops" 非零即中招:
65535
65535
listen 80 backlog=65535)单核处理瓶颈常被忽略:当网卡收包速度超过 CPU 处理能力,netstat -s 中会出现 “packet receive errors” 或 “missed” 计数:
5000 或更高echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus
ethtool -l eth0,确保 rx/tx channel 数 ≥ CPU 核数