Arthas 实战:结合 IDEA 的 Java 线上排查流程
一、为什么日志和 Debug 不够用?
在实际开发中,我们经常遇到下面这些问题:
- Controller 参数莫名其妙为 null
- 登录用户信息偶发获取不到
- 接口在测试环境正常,线上异常
- 没有日志、或者日志没覆盖到关键点
- 服务不能随便重启
- 本地无法复现问题
此时传统方式基本全部失效:
| 手段 | 问题 |
|---|
| 打日志 | 需要重新发版 |
| 本地 Debug | 连不上线上 |
| 重启服务 | 有风险 |
| 靠猜 | 极不可靠 |
这正是 Arthas 出现的背景。
二、Arthas 在真实开发中的定位
一句话概括:
Arthas 是 Java 线上运行时调试工具。
它解决的是:
程序已经在跑,但你想知道它'正在干什么'。
三、开发工具整体配合图
真实开发中通常是下面这种组合方式:
IDEA(写代码 + 看结构) → Arthas IDEA 插件(生成命令) → 服务器 / 本地 JVM(执行 Arthas) → 实时观察方法执行情况
IDEA 负责定位代码,Arthas 负责观察运行态。
四、IDEA 中如何使用 Arthas(非常关键)
1️⃣ 安装 Arthas 插件
在 IDEA 插件市场搜索:
Alibaba Arthas
安装后会获得:
- 右键生成 watch / trace / stack
- 自动拼接类名和方法名
- 不需要记复杂命令
2️⃣ IDEA 插件的常见提示说明
很多人第一次会看到:
arthas command copied to clipboard, open arthas to execute command
这并不是错误。
它的真实含义是:
命令已经帮你复制好了,但你需要进入 Arthas 手动执行。
IDEA 本身无法直接操作服务器 JVM。
五、Arthas 标准使用流程(公司常用)
第一步:启动 Arthas
java -jar arthas-boot.jar
选择目标 JVM 进程:
1: 23456 com.xxx.Application
进入成功后看到:
[arthas@23456]$
第二步:从 IDEA 复制命令
例如在 IDEA 中右键某个方法:
Arthas → Watch
复制出来的命令类似:
watch com.xxx.UserService getUser '{params,returnObj,throwExp}'
第三步:粘贴到 Arthas 执行
[arthas@23456]$ watch...
开始实时监听。
六、最常用的三类排查思路
场景一:参数异常 / 值为 null
常见问题
public Result test(@UserInfo User user)
线上却出现:
user == null
排查思路
- IDEA 中定位参数解析器:
UserInfoMethodArgumentResolver
- 使用 Arthas watch:
watch UserInfoMethodArgumentResolver * '{params,returnObj,throwExp}' -n 5 -x 3
- 观察内容:
- 是否进入解析器
- 请求参数是否正确
- 最终返回了什么对象
- 是否抛异常
能直接定位的问题
- token 未解析成功
- header 丢失
- 解析逻辑未生效
- Bean 未注入
场景二:接口变慢
现象
- 接口偶发 2~3 秒
- 日志无异常
- SQL 看不出问题
排查步骤
1. trace 整个调用链
trace com.xxx.service.UserService getUser
输出类似:
getUser ├─ queryUser() 10ms ├─ queryOrder() 850ms ← 慢点 └─ cacheGet() 2ms
2. 精确定位慢方法
- 慢 SQL
- 慢 Feign
- 慢 MQ
- 慢第三方接口
场景三:异常没日志
情况
直接抓异常:
watch com.xxx.* * '{throwExp}'
Arthas 会实时打印:
七、开发中最常用的 Arthas 命令
| 命令 | 用途 |
|---|
| watch | 看参数、返回值、异常 |
| trace | 查接口慢 |
| stack | 查调用来源 |
| jad | 看线上代码 |
| sc | 查类加载问题 |
| dashboard | JVM 监控 |
八、真实开发中的排查套路总结
实际公司中通常是:
发现问题 → IDEA 找代码位置 → 判断是参数?异常?耗时? → Arthas watch / trace → 锁定问题点 → 修复代码
九、经验总结(非常重要)
✅ Arthas 不是替代日志
而是用于:
✅ 推荐使用原则
- watch 一定加 -n
- 不要对高频方法长期监听
- 排查完及时 stop
- 精准监控,不要全链路 *
十、总结一句话
IDEA 用来看代码,Arthas 用来看代码'正在如何运行'。
当你学会把这两个工具结合起来使用:
- 你将不再害怕线上问题
- 能快速定位真实原因
- 排查效率提升数倍