
1. 步骤:登录阿里云控制台 → 选择美国(如us-west-1)可用区 → ECS 创建。建议选择网络增强型实例(例如系列以“c6/c7”或“network optimised”为准)并启用增强型网络(ENA/ENHANCED)。磁盘选本地SSD或高性能云盘,带宽按峰值预留并选择按固定带宽计费。
2. 步骤:绑定弹性公网IP(EIP),开启阿里云Global Accelerator(GA)或Global Traffic Manager,用于跨区域路由优化。在控制台配置健康检查、源站和监听端口,选择近源的CDN + GA组合减少最后一公里延迟。
3. 编辑 /etc/sysctl.conf 并加入(示例):net.core.somaxconn=10240;net.ipv4.tcp_max_syn_backlog=4096;net.ipv4.tcp_tw_reuse=1;net.ipv4.tcp_fin_timeout=15;net.ipv4.tcp_congestion_control=bbr;net.core.netdev_max_backlog=250000。保存后 sysctl -p 生效。
4. 使用 ethtool 关闭/开启功能:ethtool -K eth0 tso off gso off gro off(若CPU充足可关闭以降低延迟);启用RPS/XPS:echo 1 > /sys/class/net/eth0/queues/rx-0/rps_cpus 等并设置 irqaffinity,或使用 irqbalance 并把延迟关键进程绑定到空闲核。
5. 推荐使用 fq 或 fq_codel:tc qdisc replace dev eth0 root fq max_rate 0 || tc qdisc replace dev eth0 root fq_codel。对出站重要端口加过滤规则,示例:tc qdisc add dev eth0 root handle 1: fq_codel。
6. 把延迟敏感进程固定到专用 CPU:taskset -c 2,3 ./your_app;启动参数配置 isolcpus=2,3(/etc/default/grub 修改 GRUB_CMDLINE_LINUX)。对内核线程与网络中断设置 smp_affinity,减少上下文切换。
7. 若使用云盘,选择高IOPS盘或本地SSD。设置 I/O 调度为 noop 或 deadline:echo noop > /sys/block/sda/queue/scheduler。挂载时使用 noatime,nodiratime,针对数据库开启大页(HugePages)并在应用层使用批量写入减少 fsync 次数。
8. 在应用层启用 TCP_NODELAY(禁用Nagle)减少小包延迟;启用 HTTP/2 或 gRPC、长连接池和连接复用;TLS 使用会话复用/票据、OCSP stapling;对短连接场景使用 KeepAlive 调整 keepalive_time/interval/count。
9. 验证工具:ping、mtr、traceroute、iperf3、tcptraceroute、tcpdump、perf、sar。建议先在测试实例做逐项变更并记录基线(延迟、p95/p99、丢包、CPU),若性能下降按步骤回滚 sysctl/ethtool/tc 更改。
10. 把常用调优脚本(sysctl.conf、ethtool 启动脚本、tc 脚本)写入 systemd 服务或云助手任务,使用阿里云 CloudMonitor 与告警规则监控 p95/p99、丢包率与队列长度,出现异常自动回滚或扩容。
Q: 在阿里云美国区开启 BBR 有兼容性问题吗?
A: 大多数 Linux 4.x/5.x 内核支持 BBR,先通过 uname -r 检查内核版本并在测试环境启用:sysctl -w net.ipv4.tcp_congestion_control=bbr;确认 /proc/net/tcp 采用 bbr。生产环境先灰度验证丢包与吞吐。
Q: 关闭 GRO/TSO 会带来什么影响?
A: 关闭可降低单包处理延迟但会提高CPU占用,适用于延迟敏感且CPU有富余的场景。建议在负载测试下比较延迟与CPU开销后决定。
Q: 怎么判断是网络链路问题还是应用层引起的延迟?
A: 用 mtr/iperf3/traceroute 检测网络跳数与丢包;用 tcpdump/strace/profiler 检测应用处理时延。若网络延迟/丢包高则定位链路或云产品配置,若网络正常但 p99 高多为应用或IO瓶颈。