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