中 进阶
Arthas使用实战#
一句话答案#
Arthas 是阿里开源的 Java 在线诊断工具,核心命令:dashboard(面板)/ thread(线程)/ trace(耗时)/ jad(反编译)。
核心要点
核心命令:
| 命令 | 用途 |
|---|---|
dashboard | 实时查看系统面板(线程/内存/GC) |
thread | 查看线程状态,thread -n 3 看最忙的3个 |
jad | 反编译类,确认线上代码版本 |
watch | 观察方法入参/返回/异常 |
trace | 追踪方法调用耗时,定位慢调用 |
heapdump | 生成堆 dump 文件 |
sc/sm | 搜索类/方法 |
典型使用场景:
- CPU 飙高:
thread -n 5→ 找到占 CPU 最高的线程 →thread <id>看堆栈 - 方法耗时:
trace com.xxx.Service method→ 逐层下钻找慢点 - 代码确认:
jad com.xxx.Class→ 确认部署的是哪个版本 - 动态修改:
redefine /tmp/Fix.class→ 热修复(慎用)
面试回答(2分钟版)
Arthas是阿里开源的Java在线诊断工具,它最大的优势是不需要重启应用就能实时排查线上问题。我在实际工作中最常用的场景是CPU飙高排查:先用dashboard看全局面板确认是CPU问题还是内存问题,然后用thread -n 5找到占CPU最高的线程,再用thread加线程ID看具体堆栈定位到代码行。第二个高频场景是方法耗时定位,用trace命令可以逐层下钻找到慢调用的根因,比如某个Service方法慢,trace一下就能看到是数据库查询慢还是远程调用慢。另外jad反编译命令可以确认线上部署的代码版本是否正确,避免”我本地没问题”的扯皮。相比传统的jstack、jmap,Arthas的优势是交互式操作、功能更丰富、上手更快,但生产环境要慎用redefine热修复,避免引入新问题。
追问与易错
追问方向:
- “线上 CPU 100% 怎么用 Arthas 排查?”→ dashboard 看全局 → thread -n 5 找 CPU 最高的线程 → thread
看堆栈定位到具体代码行,通常是死循环或正则回溯 - “怎么确认线上代码版本对不对?”→ 用 jad 命令反编译目标类查看源码,对比本地代码确认部署版本是否正确,避免”本地没问题”的扯皮
- “Arthas 和 jstack 比有什么优势?”→ Arthas 交互式操作更方便,支持实时 watch 方法出入参、trace 耗时分析、动态日志级别调整,功能远比 jstack 丰富;jstack 只能导出线程快照
易错点:
- ❌ Arthas 只能排查性能问题——还能热修复和动态日志
- ❌ 生产环境随意使用 redefine