一、启动 & 基础
bash
# 一键启动(直接 attach 目标进程)
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
# 退出 Arthas(不影响 Java 进程)
quit
# 彻底关闭 Arthas 服务
stop
二、查看类 / 方法(最常用)
bash
# 1. 查看 JVM 已加载的类(支持模糊匹配)
sc *UserService*
sc -d com.example.UserService # 详细信息(Jar 路径、类加载器)
# 2. 反编译查看线上真实代码(神器)
jad com.example.UserService
jad com.example.UserService getUserById # 只看方法
三、排查性能 / 慢接口(必用)
bash
# 1. 查看方法调用链路 + 每步耗时
trace com.example.UserService getUserById
# 2. 监控方法耗时、次数、失败率
monitor com.example.UserService getUserById
# 3. 统计方法调用时间分布
tt -t com.example.UserService getUserById
四、查看入参、返回值、异常(线上调试神器)
bash
# 万能命令:入参 + 返回值 + 异常 + 耗时
watch com.example.UserService getUserById '{params,returnObj,throwExp,cost}' -x 2
# 只看入参
watch com.example.UserService getUserById '{params}'
# 只看返回值
watch com.example.UserService getUserById '{returnObj}'
五、JVM / 线程 / CPU 问题
bash
# 实时面板(CPU、线程、内存、GC 一站式)
dashboard
# 查看所有线程
thread
# 查 CPU 占用最高的 3 个线程
thread -n 3
# 查死锁线程
thread -b
# 查看 GC 情况
gc
六、谁调用了我?(调用栈)
bash
# 查看方法被谁调用
stack com.example.UserService getUserById
七、热更新(线上紧急修复)
bash
# 1. 反编译出源码
jad --source-only com.example.UserService > /tmp/UserService.java
# 2. 修改代码
vim /tmp/UserService.java
# 3. 编译
mc /tmp/UserService.java -d /tmp
# 4. 热加载替换
redefine /tmp/com/example/UserService.class
八、Spring 专用
bash
# 列出所有 Spring Bean
springBean list
# 查看 Bean 信息
springBean -i userService
九、排查 Jar 包冲突
bash
# 查看类来自哪个 Jar
sc -d com.example.UserService
# 查看类加载器树
classloader -t
十、快速记忆万能组合(记住这 5 个就够 90% 场景)
- 看代码 →
jad - 看入参/返回值 →
watch - 看哪一步慢 →
trace - 看谁调用 →
stack - 看 JVM/CPU →
dashboard
总结
- 线上出问题 :先
dashboard看整体,再trace/watch定位具体方法 - 代码不一致 :直接
jad - 接口慢 :
trace - 不知道参数对不对 :
watch