分享东京服务器 TCP 优化的实战经验,通过内核参数调整把网络吞吐量提升 3 倍。
问题一:大文件传输慢 表现:服务器带宽充足,但大文件传输速度只有理论值的 1/3。 可能原因:TCP 窗口太小;拥塞控制算法不适合;缓冲区不足。 排查步骤:iperf3 测试带宽;查看 TCP 参数;分析丢包率。 快速修复:开启 BBR;增大 TCP 缓冲区;调整拥塞控制。
问题二:高延迟连接吞吐量低 表现:到中国延迟 50ms,带宽只能跑到 100Mbps,而服务器有 1Gbps。 可能原因:TCP 窗口受延迟限制(带宽延迟积)。 排查步骤:计算带宽延迟积;查看 tcp_rmem 和 tcp_wmem。 快速修复:增大 TCP 缓冲区;开启 BBR 或 CUBIC。
问题三:丢包导致吞吐量骤降 表现:丢包率 1% 时,吞吐量下降 80%。 可能原因:TCP Reno 在丢包时过于保守。 排查步骤:测试不同丢包率下的吞吐量。 快速修复:开启 BBR,BBR 对丢包不敏感。
问题四:连接数过多导致内存不足 表现:大量连接时内存不足,服务崩溃。 可能原因:TCP 缓冲区占用过多内存。 排查步骤:查看 tcp_mem;统计连接数和内存使用。 快速修复:调整 tcp_mem 范围;优化连接数;使用连接池。
问题五:小包处理效率低 表现:大量小请求时 CPU 高,吞吐量低。 可能原因:中断过多;网卡多队列未开启。 排查步骤:查看 /proc/interrupts;检查网卡队列。 快速修复:开启网卡多队列;RPS/RFS;开启 TSO/GRO。
核心优化参数 ``` # 开启 BBR net.core.default_qdisc = fq net.ipv4.tcp_congestion_control = bbr
# 增大 TCP 缓冲区 net.core.rmem_max = 67108864 net.core.wmem_max = 67108864 net.ipv4.tcp_rmem = 4096 87380 67108864 net.ipv4.tcp_wmem = 4096 65536 67108864
# 优化连接 net.ipv4.tcp_fin_timeout = 15 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_max_syn_backlog = 8192
# 网卡优化 开启多队列、TSO、GRO、RSS ```
效果对比 | 指标 | 优化前 | 优化后 | | --- | --- | --- | | 大文件传输速度 | 300Mbps | 950Mbps | | 高延迟吞吐量 | 100Mbps | 400Mbps | | 丢包 1% 吞吐量 | 100Mbps | 500Mbps | | CPU 利用率 | 85% | 60% |
注意事项 1) 优化前测试基线,优化后对比 2) BBR 需要 Linux 4.9+ 内核 3) 缓冲区不是越大越好,要考虑内存 4) 优化要结合实际业务场景 5) 定期监控网络性能
总结:TCP 优化能显著提升网络性能,特别是高延迟和丢包场景。BBR + 合理缓冲区 + 网卡优化,三管齐下效果最好。