你有没有遇到过这种情况:
- 服务器偶尔连不上,但 Ping 正常
- 某些地区访问你的网站特别慢
- 用户反映时不时卡住,但你用本地测试一切正常
这类问题最难排查,因为它们不是完全中断,而是偶发性卡顿或延迟高,很多时候 Ping、traceroute 看不出问题。
这时候,MTR(My Traceroute) 就是你最强的网络诊断利器。
一、什么是 MTR?它比 Ping 和 Traceroute 强在哪里?
MTR 结合了 Ping + Traceroute 的功能,它不仅能追踪每一跳网络路径,还能统计每一跳的:
- 平均延迟(Latency)
- 丢包率(Loss%)
- 最小/最大延迟(Best/Worst)
- 抖动情况(StDev)
它会不断重复测试并统计数据,让你清晰看到到底是哪一跳出现了问题,而不是一次性的样本。
二、安装 MTR(Linux / macOS / Windows)
✅ Linux 系统:
- bash
# Ubuntu / Debian
sudo apt install mtr
# CentOS / RHEL
sudo yum install mtr
# Arch
sudo pacman -S mtr
✅ macOS(推荐使用 Homebrew):
- bash
brew install mtr
✅ Windows 用户:
可以使用 WinMTR 图形化版本,功能几乎一样,适合不熟悉命令行的用户。
三、基本用法示例
命令格式:
- bash
mtr your-domain.com
默认将运行一个交互式图表界面,显示每一跳的详细信息。
推荐参数组合(适合收集结果):
- bash
mtr -rwzbc100 your-domain.com
参数说明:
-r
:生成报告模式(非交互)-w
:宽屏显示-b
:显示每跳 IP 和主机名-z
:只显示有响应的节点-c100
:连续测试100次,数据更稳定
四、如何解读 MTR 输出结果?
示例输出结构(简化):
- matlab
HOST: server.local
Loss% Snt Last Avg Best Wrst StDev
0.0% 100 1.0 1.1 0.8 2.3 0.5
0.0% 100 2.5 2.3 1.9 3.2 0.4
10.0% 100 35.6 40.2 30.1 120.0 10.2
0.0% 100 90.5 91.0 88.8 92.1 1.0
重点关注指标:
项目 | 判断意义 |
---|---|
Loss% | 丢包率,>0% 就要警惕 |
Avg | 平均延迟,是否某跳突然变高 |
StDev | 抖动,如果高说明波动大 |
Wrst | 最差延迟,可能是偶发性网络高峰 |
💡 如果丢包出现在最后一跳,说明目标服务器或目标网段问题;
如果丢包出现在中间跳,可能是链路/运营商问题。
五、实战排查案例
案例 1:某地区用户访问你的网站卡顿
- bash
mtr -rwbc50 yourdomain.com
发现第 6 跳 219.76.xxx.xxx
丢包高达 70%,而它是某运营商的香港出口节点。说明问题在链路,不是你服务器的问题。
建议:
- 切换至 CN2 GIA 网络
- 或使用 CDN 让用户绕开该链路
案例 2:服务器延迟偶尔飙高
使用:
- bash
mtr -rwbc100 8.8.8.8
结果:
- 本地到出口无异常;
- 最后一跳延迟大且抖动高; 说明服务器本身压力大或遭遇 DDoS、I/O卡顿。
建议:
- 查看服务器
top
/htop
状态 - 配合
uptime
,iotop
,dstat
等工具分析负载
六、进阶用法与配合工具推荐
工具 | 配合用途 |
---|---|
ping | 精确测试某一跳的可达性 |
traceroute | 初步观察路径(适合先手预判) |
whois | 查询某跳IP归属运营商 |
tcpdump | 分析异常时是否有攻击流量 |
GoAccess | 配合分析访问日志定位攻击入口 |
七、排查建议总结表
现象 | MTR表现特征 | 可能原因 |
---|---|---|
某地区访问卡顿 | 中间跳丢包、延迟高 | 运营商出口拥堵 |
全球都慢 | 首跳/尾跳延迟高 | 本地或服务器问题 |
波动大 | 多跳抖动高、StDev高 | 不稳定链路 / 共享线路 |
丢包严重 | 中间段或末端 Loss% > 10% | 网络攻击 / 网卡压力 / 阻断 |
📌 MTR 是一个你用了就离不开的命令,尤其是你拥有公网服务器、面向多区域用户时,它能帮你快速厘清网络问题在哪一段、归谁负责、该怎么处理。
建议你平时就做几个关键IP(如DNS、网关、常用节点)的 MTR 基线测试,真正出事时,心中有数。