mtr 更适合查丢包和延迟抖动,因其融合 traceroute 路径探测与 ping 统计功能,持续发包并累积分析丢包率、RTT 均值/最大值/标准差,可暴露间歇性丢包和抖动问题。

为什么 mtr 比 ping 和 traceroute 更适合查丢包和延迟抖动
因为 mtr 是两者的结合体:它一边持续发包做路径探测(类似 traceroute),一边对每一跳统计丢包率、RTT 均值/最大值/标准差(类似多次 ping)。普通 traceroute 只显示单次路径,看不出某跳是否间歇性丢包;而单纯用 ping 又不知道问题出在本地出口、运营商骨干网还是目标服务器上游。
关键点在于:mtr 默认每秒发一个包,但会累积统计最近 10 个周期(可调)的数据,所以能暴露“看起来通但实际抖动大”或“偶发 20% 丢包”的真实链路质量。
Ubuntu/Debian 和 CentOS/RHEL 上安装 mtr 的区别
mtr 在多数发行版默认不预装,且包名和依赖略有不同:
- Ubuntu/Debian:
sudo apt update && sudo apt install mtr-tiny(轻量版,无图形界面)或mtr(含 ncurses 图形支持) - CentOS 7:
sudo yum install mtr - CentOS 8 / Rocky/AlmaLinux:
sudo dnf install mtr - 注意:
mtr-tiny不支持--report批量模式,如果要导出文本报告,必须装完整版mtr
mtr 常用命令参数和避坑要点
直接运行 mtr example.com 会进入交互式 ncurses 界面,适合实时观察。但排查问题时更常用的是批量模式和针对性参数:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 生成 60 秒统计报告:
mtr --report --report-cycles 60 example.com(--report-cycles指发送周期数,非秒数;默认每秒 1 包,所以 60 ≈ 60 秒) - 指定源 IP(多网卡服务器必备):
mtr -a 192.168.1.100 example.com,避免走错出口路由 - 禁用 DNS 反向解析(加速启动、避免干扰):
mtr -n example.com,否则某跳 DNS 超时会导致整行显示空白或延迟飙升 - 使用 ICMP(而非默认 UDP)更易穿透防火墙:
mtr -I example.com(大写 i),某些 IDC 会过滤 UDP traceroute 探测包 - 常见错误:
mtr: unable to get raw sockets→ 需 root 权限,加sudo;Failed to resolve host→ 先确认nslookup example.com是否正常
怎么看 mtr 输出判断问题在哪一跳
重点看三列:Loss%(丢包率)、Best/Avg/Wrst(延迟极值)、Last(最新一次 RTT)。不是所有高延迟都代表故障——最后一跳延迟高,前面都低,大概率是目标服务器负载或响应慢;但如果第 4 跳开始持续 30%+ 丢包,且后续跳数 Loss% 不再增长,说明问题就卡在这跳设备(如某个城域网汇聚路由器过载或策略限速)。
容易忽略的细节:
- 中间某跳显示
???并非故障,而是该节点禁用了 ICMP 回显或 TTL 超时响应,只要后续跳数能继续显示,就说明路径未断 -
Avg稳定但Wrst远高于Avg(比如 Avg=15ms,Wrst=320ms),说明存在明显抖动,常见于无线链路、QoS 策略或带宽拥塞 - 如果从第 1 跳(通常是你的网关)就开始丢包,先检查本地物理连接、ARP 表(
ip neigh show)、或是否存在 ARP 欺骗
复杂点在于:运营商常在骨干网隐藏中间节点,你看到的“第 5 跳”可能是跨省 MPLS 标签交换后的逻辑出口,实际物理路径可能绕行上千公里——这时候丢包和延迟得结合 BGP 路由信息(whois 或 bgp.he.net)交叉验证,不能只盯 mtr 单一输出。










