买海外服务器时,绝大多数人只在"签合同那一刻"测一次速,ping 一下延迟不高、下载速度不慢,就觉得没问题。结果业务上线后,一到目标用户的晚高峰就卡顿、丢包、超时,投诉不断。问题出在哪里?因为网络的瓶颈几乎都集中在晚高峰,平峰测试根本测不出真实质量。
这篇文章要解决的问题很具体:怎么科学地测试海外服务器的晚高峰网络质量。读完你能掌握分时延迟统计、丢包分析、路由追踪三套方法,知道不同地区的晚高峰分别是什么时段、如何用脚本自动采样、如何读懂数据找到瓶颈在哪一段,进而判断这条线路到底值不值得长期用。
文中延迟、丢包的数字均为经验值,用于建立量级感,实际结果以你的实测为准。
一、为什么必须测晚高峰
网络资源的分配本质上是"共享+竞争"。白天整体负载低,链路富余,谁跑都快;到了晚高峰,家庭宽带用户集中上网、跨境链路被大量占用,拥堵就出现了。对跨境线路来说更明显,因为国际出口的容量是稀缺资源。
晚高峰的典型表现有三种:
- 延迟升高:平峰 50ms,晚高峰可能 100ms 以上。
- 丢包增加:尤其在国际出口的那几跳,可能出现 5% 甚至更高的丢包。
- 抖动变大:延迟忽高忽低,对实时业务是致命的。
这三种现象在平峰时可能完全看不到,所以只测平峰等于没测。判断一条线路好不好,必须看它在最拥堵时段的表现。
二、不同地区的晚高峰是什么时段
测晚高峰的第一个难点是时区。海外服务器的当地时间晚高峰,未必对应你所在地的晚高峰;而你要测的"晚高峰",应该是目标用户所在地的晚高峰。
下面是经验性的晚高峰时段(当地时间):
| 地区 | 晚高峰时段(当地) | 需注意 |
|---|---|---|
| 中国大陆 | 19:00-23:00(CST, UTC+8) | 最典型、最拥堵 |
| 日本 / 韩国 | 20:00-23:00(JST/KST, UTC+9) | 与中国接近 |
| 新加坡 / 东南亚 | 19:00-23:00(SGT, UTC+8) | 与中国同时区 |
| 美西 | 17:00-22:00(PT, UTC-8/-7) | 与中国差 15-16 小时 |
| 美东 | 18:00-22:00(ET, UTC-5/-4) | 与中国差 12-13 小时 |
| 欧洲 | 19:00-22:00(CET, UTC+1/+2) | 与中国差 7-8 小时 |
关键提醒:如果你的美国服务器主要服务中国大陆用户,那么"晚高峰"指的是中国大陆的 19:00-23:00,而这段时间换算成美国时间是凌晨或上午。你在美国白天测,正好错过了中国用户的拥堵时段,自然测不出问题。
所以先明确:你要测的是哪一地用户的晚高峰,再换算时区。
三、分时延迟与丢包测试
最基础也最重要的方法,是在多个时段持续采样。先给单次命令,再给自动化脚本。
# 一、单次测延迟,观察抖动(mdev)
ping -c 100 -i 0.5 203.0.113.10
# 关注 min/avg/max/mdev 四个值,mdev 大说明抖动严重
# 二、mtr 报告模式,看每一跳的丢包分布(安装按发行版)
# RHEL/CentOS/Rocky
sudo dnf install -y mtr
# Debian/Ubuntu
sudo apt update && sudo apt install -y mtr
mtr -rwzbc 100 203.0.113.10
# 100 次采样更稳,单次 mtr 会被 ICMP 限速误导
# 三、TCP 模式,很多骨干节点不响应 ICMP
sudo mtr -T -P 443 -rwzbc 100 203.0.113.10
# 四、用 tcping 测端口层延迟(ICMP 被限时更准)
tcping -t 50 203.0.113.10 443
自动化分时采样脚本,让它在后台跑一整天,覆盖晚高峰:
#!/bin/bash
# 保存为 /usr/local/bin/netwatch.sh,配合 systemd timer 或 cron 运行
TARGET="203.0.113.10"
LOG="/var/log/netwatch.log"
while true; do
ts=$(date '+%F %T')
# 5 个包一个采样点,取平均与丢包
line=$(ping -c 5 -i 0.4 -W 2 "$TARGET" | tail -1)
echo "$ts $line" >> "$LOG"
sleep 60
done
用 cron 在晚高峰固定跑一轮,或用 systemd timer:
# 用 cron 每天 19:00-23:00 每 5 分钟采样一次(CST 时区)
# crontab -e 加入:
*/5 19-22 * * * /usr/local/bin/netwatch.sh_once
# 或用 systemd timer 更规范(示例,units 按需编写)
sudo systemctl enable --now netwatch.timer
journalctl -u netwatch -f
四、路由分析:找到瓶颈在哪一段
延迟和丢包只告诉你"有问题",路由分析才能告诉你"问题出在哪"。核心是用 mtr 对比平峰和晚高峰的路由,看是否绕路或在某一跳开始丢包。
# 一、分别保存平峰和晚高峰的 mtr 报告,对比 hop
mtr -rwzbc 100 203.0.113.10 > /tmp/mtr_offpeak.txt
mtr -rwzbc 100 203.0.113.10 > /tmp/mtr_peak.txt
# 二、逐跳看丢包:中间跳丢包但末跳不丢,通常是该节点限速 ICMP,属正常
# 末跳或末几跳持续丢包,才是真丢包
cat /tmp/mtr_peak.txt
# 三、测回程:在海外服务器上 mtr 回你的客户端/大陆 IP
mtr -rwzbc 100 <你的公网IP>
# 四、对比去回程路径,判断是否单向优化
# 去程走优质线路、回程走普通线路 = 单向优化,晚高峰照样差
判读经验:
- 平峰和晚高峰路由相同、延迟接近:线路稳定,优质。
- 晚高峰多出若干绕行 hop:说明路由在高峰期发生了变化,可能被调度到拥堵路径。
- 某一跳开始持续丢包到末跳:该跳之后到目标的路径有问题,通常是国际出口或机房出口。
- 中间跳丢包但末跳正常:多为该节点对 ICMP 限速,不必担心。
还要注意 TCP 模式:当 ICMP 结果异常时,用 sudo mtr -T -P 443 复核,避免被 ICMP 限速误导得出错误结论。
五、带宽质量测试
除了延迟和丢包,晚高峰的实际可用带宽也很关键。
# 一、iperf3 压测(需一台对端服务器)
# RHEL/CentOS/Rocky
sudo dnf install -y iperf3
# Debian/Ubuntu
sudo apt update && sudo apt install -y iperf3
# 客户端:多并发流,测 30 秒,观察是否稳定
iperf3 -c 198.51.100.20 -P 8 -t 30
# 若带宽随时间递减、波动大,说明存在共享争用或链路拥堵
# 二、用 curl 下载测试文件,测实际下载速度
curl -o /dev/null -w '下载速度: %{speed_download} B/s 用时: %{time_total}s\n' \
http://198.51.100.20/testfile.bin
# 三、用 vnstat 看长期流量,结合 sar 看峰值(需 sysstat)
# RHEL/CentOS/Rocky: sudo dnf install -y sysstat vnstat
# Debian/Ubuntu: sudo apt update && sudo apt install -y sysstat vnstat
sar -n DEV 1 5
vnstat -h
建议在晚高峰用 iperf3 多跑几轮,和平峰对比。如果晚高峰带宽只有平峰的一半甚至更低,说明这条线路在高峰期被严重争用。
六、把数据整理成结论
测完一堆数据,怎么得出结论?给出一个简单的判断框架:
| 指标 | 良好 | 一般 | 较差 |
|---|---|---|---|
| 晚高峰延迟 | 与平峰差 < 20% | 差 20%-50% | 差 > 50% |
| 晚高峰丢包 | < 1% | 1%-3% | > 3% |
| 延迟抖动 mdev | < 10ms | 10-30ms | > 30ms |
| 晚高峰带宽 | > 平峰 80% | 平峰 50%-80% | < 平峰 50% |
| 路由稳定性 | 平峰=晚高峰 | 轻微绕路 | 明显绕路或改道 |
(以上阈值为经验值,不同业务容忍度不同。实时业务要求更严,普通网站可放宽。)
结论要落到决策:如果晚高峰表现"较差",说明这条线路不适合对大陆或有实时要求的业务,要么换机房,要么升级优化线路;如果只是"一般",看业务能否容忍,必要时配合 CDN 缓解。
七、风险提示与注意事项
测速本身有干扰。 大量 ping/mtr 可能被运营商或机房限速 ICMP,导致误判。用 TCP 模式复核,并控制频率。
采样要覆盖足够长时间。 单天数据可能受偶发事件影响,建议至少连续观测 3-7 天。
注意时区换算。 前面反复强调,测错时段等于白测。用带时区的工具或直接在脚本里 TZ=Asia/Shanghai date 明确时区。
改用系统服务或防火墙要谨慎。 部署采样脚本时,如果为它开防火墙端口或改系统服务,务必保留回滚方式,别把生产环境改坏。
# 若用 systemd 部署采样服务,停用与回滚
sudo systemctl disable --now netwatch.timer
sudo rm -f /etc/systemd/system/netwatch.timer /etc/systemd/system/netwatch.service
sudo systemctl daemon-reload
常见问题
Q:为什么我测速很快,用户却说卡?
你测的是平峰,用户卡在晚高峰。跨境线路的瓶颈集中在目标用户的高峰时段,必须在那个时段测才有意义。
Q:mtr 中间跳丢包是严重问题吗?
不一定。中间跳丢包但末跳正常,通常是该节点对 ICMP 限速,属正常现象。只有末跳或末几跳持续丢包才是真丢包。
Q:一定要装 iperf3 吗?
测带宽质量它最准。如果只想看延迟和丢包,ping 和 mtr 就够了。带宽和延迟是两条线,都要评估。
Q:怎么判断是不是"单向优化"?
去程和回程分别用 mtr 测。如果去程走优质线路而回程走普通线路,就是单向优化,晚高峰回程会拖后腿。
Q:晚高峰数据每天都不同正常吗?
正常。偶发拥堵、临时调度都会造成波动,所以要连续观测多天看趋势,而不是凭一天的数据下结论。
总结
晚高峰测试的关键是"在对的时段、对的目标测":先明确目标用户所在地区的晚高峰(中国大陆通常是 19:00-23:00),再换算成服务器所在时区,否则测的时段根本不对。
方法上分三层:ping 看分时延迟与抖动,mtr 加 TCP 模式看每跳丢包与路由是否绕路,iperf3 看晚高峰实际可用带宽;三者结合才能定位瓶颈在跨境链路、国际出口还是机房出口。
判读要点是"末跳丢包才算真丢包、中间跳丢包多为 ICMP 限速"、"平峰与晚高峰路由对比找绕路"、"去回程都要测以识别单向优化"。
必须做分时自动采样并连续观测多天,单次或单天数据容易被偶发事件误导,采样脚本可用 cron 或 systemd timer 在晚高峰固定运行。
测速本身可能被 ICMP 限速干扰,要用 TCP 模式复核;部署采样服务属于系统改动,务必准备停用与回滚步骤,避免影响生产环境。
企业QQ咨询




