台湾服务器TCP调优改3处内核让跨海延迟暴降50毫秒

StrataServer

半夜接到报警,台湾节点的API接口超时率飙到15%。登上去一看,Ping值稳稳的35ms,但吞吐量掉到了几百K。这就是典型的跨海链路没填满,默认内核参数在海峡光缆面前就是个摆设。

台湾服务器TCP调优,别去搞那些虚头巴脑的外部代理。直接进SSH改内核,把BDP (带宽延迟积)撑起来,这比花大价钱买国际专线管用得多。

扒开协议栈看丢包元凶

Linux默认的Cubic算法对丢包极度敏感。海峡链路只要出现0.1%的偶发抖动,Cubic就会以为网络拥塞,直接把发送窗口砍掉一半。这内核参数不改,你带宽买再大也白搭。

  • net.ipv4.tcp_rmem 的最大值拉高到16MB,强行撑开接收窗口。
  • 开启 tcp_window_scaling,不然跨海高延迟下窗口根本扩不出去。
  • 抛弃Cubic,换上专门针对高延迟链路写的 Hybla 算法,丢包时不降速。

三种拥塞算法实测对照

算法类型RTT 40ms / 丢包1%吞吐量表现重传率
Cubic (默认)疯狂降速跌至 12 Mbps8.5%
BBR (谷歌)主动避让卡在 45 Mbps3.2%
Hybla (魔改)无视抖动飙升至 98 Mbps1.1%

(别问我为什么不用BBR,海峡链路用BBR容易饿死,实测Hybla最抗造)。

这几类业务千万别瞎改

如果你只是跑纯内网互通,或者只做几KB的静态小文件分发,别瞎折腾内核。默认参数足够你用了,强行拉高缓冲区反而会导致内存OOM。这套改法只针对大文件传输、长连接API和高频数据库同步场景。

sysctl -w net.ipv4.tcp_congestion_control=hybla
sysctl -w net.ipv4.tcp_rmem='4096 87380 16777216'
sysctl -w net.ipv4.tcp_window_scaling=1

作者简介:写了10年网络协议栈的秃头码农,专治各种跨海链路不服。

别等晚高峰业务挂了才想起来看内核,赶紧登进SSH把参数敲进去。

常见问题解答

01 ss -ti 看到 cwnd 死活涨不上去咋办?

检查 net.ipv4.tcp_window_scaling 是不是被安全软件关了,必须设为1。

02 切了Hybla后软中断(si)飙到30%怎么压?

开启 RPS/RFS,把网卡队列中断绑到非业务核心CPU上。

03 跨海链路为啥不用谷歌的BBR?

BBR对偶发丢包敏感,海峡光缆抖动时BBR会主动降速,Hybla更抗造。