mtr 是主动发包探测路径的诊断工具,非查看静态路由;默认 ncurses 交互界面不退出,需加 -r -c n 生成一次性报告,且常需 sudo 权限和 -n 避免 dns 延迟。

mtr 不是“查看路由追踪”的命令,它是主动发起路径探测的诊断工具;直接运行 mtr 不会显示已有路由表或历史路径,而是实时发包、构建并输出当前可达路径。
为什么 mtr google.com 卡在界面里,没法看结果?
这是新手最常遇到的问题:默认启动的是 ncurses 交互式界面,不自动退出,也没法重定向保存。你不是“没看到”,而是它根本没输出完就挂在那里等你按键。
- 必须加
-r(或--report)才能生成一次性文本报告 -
-r必须和-c N配合使用,比如mtr -r -c 20 google.com;单独mtr -r google.com会卡住 - 不加
-n时,某跳 DNS 反解超时会导致整行延迟数秒,结果失真甚至中断 - 输出到文件用
> report.txt,但别忘了加sudo——ICMP 探测需要 root 权限
mtr -r -c 20 输出里哪几列真有用?
默认八列看着多,实际盯死三列就够了:
-
Loss%:该跳设备是否响应了你的探测包。100% 丢包 ≠ 断了,华为/H3C/云 SLB 普遍禁 ICMP,只要下一跳Loss%回到 0%,且最终目标可达,就只是“隐身” -
Avg:平均延迟。连续两跳Avg差值 > 50ms,且后跳Loss%同步上升 → 故障点大概率在前一跳出口或后一跳入口 -
StDev(标准差):比Avg更早暴露抖动。若某跳StDev > 30ms但Loss% == 0,很可能是 BGP 路由震荡,不是丢包
装错包名,mtr --report 直接报错怎么办?
不同发行版包名不统一,装错就缺关键功能:
- Debian/Ubuntu:
sudo apt install mtr-tiny没--report,必须用sudo apt install mtr - CentOS 7:
sudo yum install mtr可用;CentOS 8+/Rocky/AlmaLinux:先sudo dnf install epel-release,再sudo dnf install mtr - 装完验证:
mtr --help | grep report有输出,且mtr --version能返回版本号,才算真正可用
想绕过 ICMP 限速,但 --tcp 报错或无效?
部分设备对 ICMP 做频率限制,TCP 模式能更真实反映业务路径,但容易踩坑:
-
--tcp必须配合-P 端口,例如mtr --tcp -P 443 -r -c 50 example.com;不指定端口会失败 - 某些内核或旧版 mtr 不支持
--tcp,报unknown option→ 升级 mtr 或换用-T(等价缩写) - TCP 模式下,如果某跳
Loss%从 100% 降到 0%,而 ICMP 模式仍是 100%,基本确认是中间设备主动限 ICMP,不是链路故障
真正难的不是跑出结果,而是判断哪一行代表真实瓶颈——丢包率突变的位置、延迟跃升的跳数、标准差异常的节点,三者要交叉印证;单看一列很容易误判。











