面试知识库
进阶

Arthas使用实战#

一句话答案#

Arthas 是阿里开源的 Java 在线诊断工具,核心命令:dashboard(面板)/ thread(线程)/ trace(耗时)/ jad(反编译)。

核心要点

核心命令:

命令用途
dashboard实时查看系统面板(线程/内存/GC)
thread查看线程状态,thread -n 3 看最忙的3个
jad反编译类,确认线上代码版本
watch观察方法入参/返回/异常
trace追踪方法调用耗时,定位慢调用
heapdump生成堆 dump 文件
sc/sm搜索类/方法

典型使用场景:

  1. CPU 飙高thread -n 5 → 找到占 CPU 最高的线程 → thread <id> 看堆栈
  2. 方法耗时trace com.xxx.Service method → 逐层下钻找慢点
  3. 代码确认jad com.xxx.Class → 确认部署的是哪个版本
  4. 动态修改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