一个顶俩的网络诊断工具,mtr 把 ping 和 traceroute 合二为一

traviscross/mtr 这个项目在 GitHub 上拿到了 3,234 Star:

正文顶部截图

README区域截图


网络出问题时,运维人员通常会先 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 解析,按 jk 上下滚动。

如果是定位跨国线路问题,看哪一跳延迟突然飙升,基本就能判断是哪个运营商或者海底光缆的问题。

做日常巡检时,加 -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 值得放在手边。出故障的时候,它会帮你省下不少时间。

提升。

项目使用 GPL v2 协议开源,由 Travis Cross 维护。Bug 报告和补丁可以通过 GitHub 提交。

如果你日常需要排查网络问题,mtr 值得放在手边。出故障的时候,它会帮你省下不少时间。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐