一个顶俩的网络诊断工具,mtr 把 ping 和 traceroute 合二为一
一个顶俩的网络诊断工具,mtr 把 ping 和 traceroute 合二为一
traviscross/mtr 这个项目在 GitHub 上拿到了 3,234 Star:


网络出问题时,运维人员通常会先 ping 一下看通不通,再 traceroute 一下看卡在哪一跳。两套命令来回切,效率不高。
mtr 把这两个工具的活全干了,而且做得更细致。
mtr 全称 My TraceRoute,一个开源网络诊断工具,将 ping 和 traceroute 的功能合并到一个实时更新的界面里。它持续向目标主机发送探测包,逐跳统计丢包率和延迟,结果直观。
mtr 比 ping + traceroute 强在哪
单独用 ping,你只知道端到端是否可达,中间哪个节点出了问题无从得知。
单独用 traceroute,它只跑一次,ICMP 可能被中间路由器限速或丢弃,单次结果不可靠。
mtr 的做法是持续发包,对每一跳都积累统计样本。丢包率、平均延迟、最差延迟、标准差,全都有数据支撑。中间某跳显示丢包,不代表那个节点一定有问题,可能是该路由器配置了不响应 ICMP,但后续跳正常就说明流量仍在转发。
换句话说,mtr 给出的不是一次性快照,而是持续测量的统计结果。排查间歇性丢包或延迟抖动时,这个能力很有用。
三个平台都能用
Linux 上安装最简单:
sudo apt install mtr
macOS 通过 Homebrew:
brew install mtr
Windows 用户需要先安装 WSL(Windows Subsystem for Linux),然后在 WSL 里执行和 Linux 一样的安装命令。
也可以从源码编译:
./bootstrap.sh && ./configure && make
注意 mtr-packet 需要 root 权限才能访问原始套接字,安装后使用 sudo 运行即可。
典型使用场景
排查到某个网站访问慢:
mtr baidu.com
界面会实时刷新每一跳的延迟和丢包率。按 d 切换显示模式,按 n 启用 DNS 解析,按 j 和 k 上下滚动。
如果是定位跨国线路问题,看哪一跳延迟突然飙升,基本就能判断是哪个运营商或者海底光缆的问题。
做日常巡检时,加 -r 参数输出报告模式,适合写入日志:
mtr -r baidu.com
加 -c 指定发包次数后自动退出:
mtr -r -c 100 baidu.com
几个实用参数
-i 控制发包间隔(默认 1 秒),加大间隔减少网络负担:
mtr -i 2 baidu.com
-s 指定 ping 包大小,用来测试 MTU 问题:
mtr -s 1400 baidu.com
-P 指定端口,用 TCP 探测代替 ICMP,有些节点会屏蔽 ICMP:
mtr -P 443 baidu.com
-u 改用 UDP 探测,同样是绕过 ICMP 限制的常用方法。
总结
mtr 属于那种不花哨但真正解决痛点的工具。它没有重新发明什么,只是把 ping 和 traceroute 两个基础工具的能力做了整合,但整合的方式让排障效率明显提升。
项目使用 GPL v2 协议开源,由 Travis Cross 维护。Bug 报告和补丁可以通过 GitHub 提交。
如果你日常需要排查网络问题,mtr 值得放在手边。出故障的时候,它会帮你省下不少时间。
浙公网安备 33010602011771号