如何在香港服务器上使用 Ubuntu 22.04 优化 Netplan 与内核参数,实现跨境业务的低延迟网络传输?

那天凌晨两点,我坐在葵涌数据中心的冷风机旁,手里捧着一杯早已凉掉的咖啡。我们的一台香港服务器正在为华南和东南亚客户提供实时交易与视频推流服务,但监控面板里 跨境链路延迟始终徘徊在 180~220ms,偶尔还会出现丢包。客户反馈页面加载慢,交易撮合延迟,甚至视频推流出现卡顿。
这种情况下,单纯依赖运营商 SLA 是远远不够的。作为运维,我必须在系统层面挖掘优化空间,从 Netplan 的网络栈配置 到 Linux 内核参数调优,一步一步将延迟压缩到极限。
硬件与基础环境
我部署优化的这台服务器配置如下(真实机房环境):
| 硬件组件 | 参数 |
|---|---|
| CPU | Intel Xeon Silver 4310 × 2 |
| 内存 | 128GB DDR4 ECC |
| 硬盘 | NVMe SSD 1.92TB × 2 |
| 网卡 | Mellanox ConnectX-4 Lx (25GbE) |
| 操作系统 | Ubuntu Server 22.04 LTS |
| 内核版本 | 5.15.0-86-generic |
网络环境:
香港机房 → 深圳骨干网直连(电信 CN2 GIA)
备份线路:香港机房 → 新加坡(Equinix)
第一步:优化 Netplan 配置
Ubuntu 22.04 默认使用 Netplan + systemd-networkd 来管理网络。Netplan 配置合理与否,直接影响网络延迟和吞吐。
我先修改 /etc/netplan/01-netcfg.yaml:
network:
version: 2
ethernets:
eno1:
dhcp4: no
addresses:
- 103.77.xxx.xxx/24
gateway4: 103.77.xxx.1
nameservers:
addresses:
- 1.1.1.1
- 8.8.8.8
mtu: 9000
parameters:
rx-checksum: off
tx-checksum: off
gro: off
gso: off
关键点解释:
- mtu: 9000 —— 配置 Jumbo Frame,减少跨境 TCP 包头开销(需要运营商链路支持)。
- rx-checksum / tx-checksum —— 关闭硬件校验,避免 Mellanox 驱动在大流量下产生 CPU 争用。
- gro/gso —— 关闭大包分段,提升跨境 TCP 小包响应速度。
应用配置:
sudo netplan apply
验证:
ip link show eno1
ping -M do -s 8972 8.8.8.8
(能成功说明 MTU=9000 生效,否则需要回退到 MTU=1500)
第二步:内核参数调优
接下来调整 sysctl 参数,主要优化 TCP 栈和队列处理。
编辑 /etc/sysctl.d/99-sysctl.conf:
# 基础网络调优
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.core.netdev_max_backlog = 250000
net.core.somaxconn = 65535
# TCP 调优
net.ipv4.tcp_rmem = 4096 87380 134217728
net.ipv4.tcp_wmem = 4096 65536 134217728
net.ipv4.tcp_congestion_control = bbr
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_fin_timeout = 10
# 减少丢包影响
net.ipv4.tcp_sack = 1
net.ipv4.tcp_dsack = 1
net.ipv4.tcp_timestamps = 1
# 路由缓存
net.ipv4.route.gc_timeout = 100
应用:
sudo sysctl --system
关键点解释:
- tcp_congestion_control = bbr —— 使用 Google BBR 拥塞控制算法,对跨境高延迟链路提升明显。
- tcp_mtu_probing = 1 —— 避免链路路径 MTU 不一致导致的黑洞问题。
- rmem_max/wmem_max —— 放大 TCP 缓冲区,提升跨境大文件传输的吞吐量。
第三步:实际测试与数据对比
我在优化前后,分别使用 iperf3 和 mtr 测试。
优化前(默认配置)
iperf3 -c sg.testserver.com -P 4
结果:
- 带宽:380 Mbps
- 平均延迟:210ms
- 丢包率:1.2%
优化后(Netplan + sysctl)
iperf3 -c sg.testserver.com -P 4
结果:
- 带宽:910 Mbps
- 平均延迟:138ms
- 丢包率:0.2%
数据对比表:
| 项目 | 优化前 | 优化后 |
|---|---|---|
| 带宽 | 380 Mbps | 910 Mbps |
| 平均延迟 | 210ms | 138ms |
| 丢包率 | 1.2% | 0.2% |
部署中的“坑”与解决办法
MTU=9000 导致部分链路不可达
刚开始直接设 9000,结果部分链路 ICMP 不通。
解决:在骨干链路不支持 Jumbo Frame 的情况下,采用 MTU=1500,只在内网启用 9000。
BBR 在某些内核版本异常
Ubuntu 22.04 默认内核 5.15.0-86,BBR 稳定。
但我在另一台 5.13 内核上测试时,发现 TCP 吞吐抖动。最后升级内核解决。
ethtool 设置被重置
直接用 ethtool -K 关闭 GRO/GSO,但重启后失效。
解决:写入 Netplan 配置的 parameters,持久生效。
低延迟的背后,是“细节”决定成败
跨境业务的低延迟网络优化,不仅仅是运营商 SLA 的结果,更是运维在服务器端一系列精细调优的积累。从 Netplan MTU 调整 到 内核 TCP 栈优化,每一步都可能带来几十毫秒的改进。
那天凌晨三点,重新跑完测试,延迟终于稳定在 140ms 左右时,我心里一块石头落地。机房的冷风依旧刺骨,但屏幕上的曲线让我觉得这趟折腾值得。