Arthas是阿里巴巴开源的Java诊断工具,支持在线排查问题、性能分析、类热更新等,是生产环境必备的诊断利器。
本文系统介绍Arthas的核心功能和实战案例,帮助你快速定位和解决线上问题。
一、Arthas简介
1.1 核心能力
| 功能 | 说明 |
|---|---|
| 实时监控 | 方法执行耗时、调用次数 |
| 堆栈追踪 | 查看方法调用链路 |
| 反编译 | 动态查看class源码 |
| 类热更新 | 运行时修改class |
| 线程分析 | 死锁检测、线程状态 |
| 内存分析 | 堆转储、对象统计 |
| OGNL表达式 | 运行时执行任意代码 |
2026/8/19大约 6 分钟
Arthas是阿里巴巴开源的Java诊断工具,支持在线排查问题、性能分析、类热更新等,是生产环境必备的诊断利器。
本文系统介绍Arthas的核心功能和实战案例,帮助你快速定位和解决线上问题。
| 功能 | 说明 |
|---|---|
| 实时监控 | 方法执行耗时、调用次数 |
| 堆栈追踪 | 查看方法调用链路 |
| 反编译 | 动态查看class源码 |
| 类热更新 | 运行时修改class |
| 线程分析 | 死锁检测、线程状态 |
| 内存分析 | 堆转储、对象统计 |
| OGNL表达式 | 运行时执行任意代码 |
凌晨 3 点,你被监控告警吵醒:线上某核心服务 CPU 使用率突破 95%。用户开始反馈接口超时,此时你只有 15 分钟时间,必须在故障扩散前定位到具体的代码行。本文带你走完从告警到代码行的全链路定位过程。
在动手排查之前,先建立 CPU 飙升原因的全局认知。不同原因对应的排查工具和修复方案完全不同:
┌─────────────────────────────────────────────────────────────┐
│ CPU 飙升原因分类 │
├──────────────┬──────────────┬──────────────┬────────────────┤
│ 代码层面 │ JVM 层面 │ GC 层面 │ 外部因素 │
├──────────────┼──────────────┼──────────────┼────────────────┤
│ 死循环 │ JIT 编译 │ Full GC │ 流量突增 │
│ 正则回溯 │ 类加载开销 │ GC 线程过多 │ 被其他进程挤占 │
│ 高频序列化 │ 线程数过多 │ GC 算法不适配│ 容器 CPU 限制 │
│ 密集计算 │ 锁自旋 │ │ │
│ 递归无终止 │ │ │ │
└──────────────┴──────────────┴──────────────┴────────────────┘
接口偶发慢但找不到原因?CPU 不高但响应延迟大?火焰图是性能分析的终极武器,一眼定位热点代码。
火焰图(Flame Graph):
将 CPU 采样数据可视化为"火焰"形状的 SVG 图
┌────────────────────────────────────────────────┐
│ main() │ ← 栈底(宽=CPU时间多)
│ ┌──────────┐ ┌────────────────┐ │
│ │ handle() │ │ process() │ │
│ │ ┌──────┐ │ │ ┌────────────┐ │ │
│ │ │ db() │ │ │ │ serialize()│ │ │ ← 栈顶(窄=CPU时间少)
│ │ └──────┘ │ │ └────────────┘ │ │
│ └──────────┘ └────────────────┘ │
└────────────────────────────────────────────────┘
横轴:CPU 占用时间比例(越宽越热)
纵轴:调用栈深度(从下到上)
颜色:随机(不影响分析)
看图口诀:
找最宽的"平台" → CPU 占用最多的方法 → 优化目标
找最深的"柱子" → 调用链最长的路径 → 可能有问题
CPU 飙高但不知道哪个线程?接口偶发卡顿排查不到?内存涨不停但不知道哪里泄漏?线上问题排查是后端工程师的核心能力,这篇覆盖 6 大高频场景。
jps → 列出 Java 进程
jstat → GC 统计信息
jstack → 线程栈 dump
jmap → 堆 dump + 对象直方图
jcmd → 多功能诊断(推荐)
jinfo → 查看/修改 JVM 参数
jhat → 堆 dump 分析(已过时,用 MAT)
jhsdb → Java 9+ 堆调试工具