Arthas是阿里巴巴开源的Java诊断工具,支持在线排查问题、性能分析、类热更新等,是生产环境必备的诊断利器。
本文系统介绍Arthas的核心功能和实战案例,帮助你快速定位和解决线上问题。
一、Arthas简介
1.1 核心能力
| 功能 | 说明 |
|---|---|
| 实时监控 | 方法执行耗时、调用次数 |
| 堆栈追踪 | 查看方法调用链路 |
| 反编译 | 动态查看class源码 |
| 类热更新 | 运行时修改class |
| 线程分析 | 死锁检测、线程状态 |
| 内存分析 | 堆转储、对象统计 |
| OGNL表达式 | 运行时执行任意代码 |
2026/8/19大约 6 分钟
Arthas是阿里巴巴开源的Java诊断工具,支持在线排查问题、性能分析、类热更新等,是生产环境必备的诊断利器。
本文系统介绍Arthas的核心功能和实战案例,帮助你快速定位和解决线上问题。
| 功能 | 说明 |
|---|---|
| 实时监控 | 方法执行耗时、调用次数 |
| 堆栈追踪 | 查看方法调用链路 |
| 反编译 | 动态查看class源码 |
| 类热更新 | 运行时修改class |
| 线程分析 | 死锁检测、线程状态 |
| 内存分析 | 堆转储、对象统计 |
| OGNL表达式 | 运行时执行任意代码 |
接口偶发慢但找不到原因?CPU 不高但响应延迟大?火焰图是性能分析的终极武器,一眼定位热点代码。
火焰图(Flame Graph):
将 CPU 采样数据可视化为"火焰"形状的 SVG 图
┌────────────────────────────────────────────────┐
│ main() │ ← 栈底(宽=CPU时间多)
│ ┌──────────┐ ┌────────────────┐ │
│ │ handle() │ │ process() │ │
│ │ ┌──────┐ │ │ ┌────────────┐ │ │
│ │ │ db() │ │ │ │ serialize()│ │ │ ← 栈顶(窄=CPU时间少)
│ │ └──────┘ │ │ └────────────┘ │ │
│ └──────────┘ └────────────────┘ │
└────────────────────────────────────────────────┘
横轴:CPU 占用时间比例(越宽越热)
纵轴:调用栈深度(从下到上)
颜色:随机(不影响分析)
看图口诀:
找最宽的"平台" → CPU 占用最多的方法 → 优化目标
找最深的"柱子" → 调用链最长的路径 → 可能有问题
内存泄漏不是重启就能解决的——它会回来。找到根因、彻底修复才是正道。7 种真实泄漏模式,每种都有代码复现、MAT 分析过程和修复方案。
信号 1:Full GC 越来越频繁
第 1 天:每 2 小时一次 Full GC
第 3 天:每 30 分钟一次
第 5 天:每 5 分钟一次
→ 典型的内存泄漏趋势
信号 2:GC 后老年代不下降
Full GC 前老年代 3.5GB
Full GC 后老年代 3.2GB(只降了 300MB)
→ 存在大量无法回收的对象
信号 3:堆使用量持续上升
jstat -gc <pid> 5000
OU(Old Used)持续增长,从不下降
信号 4:OOM 最终爆发
如果不处理 → 几天/几周后 OOM
CPU 飙高但不知道哪个线程?接口偶发卡顿排查不到?内存涨不停但不知道哪里泄漏?线上问题排查是后端工程师的核心能力,这篇覆盖 6 大高频场景。
jps → 列出 Java 进程
jstat → GC 统计信息
jstack → 线程栈 dump
jmap → 堆 dump + 对象直方图
jcmd → 多功能诊断(推荐)
jinfo → 查看/修改 JVM 参数
jhat → 堆 dump 分析(已过时,用 MAT)
jhsdb → Java 9+ 堆调试工具