Arthas 实战指南:结合 IDEA 的 Java 线上排查完整流程
本文不讲空洞原理,重点讲 在真实开发中如何结合 IDEA 使用 Arthas 排查问题,适合已经写过 Spring Boot 项目的 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
bash
java -jar arthas-boot.jar|java -jar arthas-boot.jar 1
选择目标 JVM 进程:
1: 23456 com.xxx.Application
进入成功后看到:
[arthas@23456]$
第二步:从 IDEA 复制命令
例如在 IDEA 中右键某个方法:
Arthas → Watch
复制出来的命令类似:
bash
watch com.xxx.UserService getUser '{params,returnObj,throwExp}'
第三步:粘贴到 Arthas 执行
bash
[arthas@23456]$ watch ...
开始实时监听。
六、最常用的三类排查思路
场景一:参数异常 / 值为 null
常见问题
java
public Result test(@UserInfo User user)
线上却出现:
java
user == null
排查思路
1️⃣ IDEA 中定位参数解析器:
UserInfoMethodArgumentResolver
2️⃣ 使用 Arthas watch:
bash
watch UserInfoMethodArgumentResolver * \
'{params,returnObj,throwExp}' -n 5 -x 3
3️⃣ 观察内容:
- 是否进入解析器
- 请求参数是否正确
- 最终返回了什么对象
- 是否抛异常
能直接定位的问题
- token 未解析成功
- header 丢失
- 解析逻辑未生效
- Bean 未注入
场景二:接口变慢
现象
- 接口偶发 2~3 秒
- 日志无异常
- SQL 看不出问题
排查步骤
1️⃣ trace 整个调用链
bash
trace com.xxx.service.UserService getUser
输出类似:
getUser
├─ queryUser() 10ms
├─ queryOrder() 850ms ← 慢点
└─ cacheGet() 2ms
2️⃣ 精确定位慢方法
- 慢 SQL
- 慢 Feign
- 慢 MQ
- 慢第三方接口
场景三:异常没日志
情况
- 用户报错
- 日志无异常
- 无法复现
直接抓异常:
bash
watch com.xxx.* * '{throwExp}'
Arthas 会实时打印:
- 异常类型
- 异常堆栈
- 抛出位置
七、开发中最常用的 Arthas 命令
| 命令 | 用途 |
|---|---|
| watch | 看参数、返回值、异常 |
| trace | 查接口慢 |
| stack | 查调用来源 |
| jad | 看线上代码 |
| sc | 查类加载问题 |
| dashboard | JVM 监控 |
八、真实开发中的排查套路总结
实际公司中通常是:
发现问题
↓
IDEA 找代码位置
↓
判断是参数?异常?耗时?
↓
Arthas watch / trace
↓
锁定问题点
↓
修复代码
九、经验总结(非常重要)
✅ Arthas 不是替代日志
而是用于:
- 日志没打
- 无法发版
- 需要立即定位问题
✅ 推荐使用原则
- watch 一定加 -n
- 不要对高频方法长期监听
- 排查完及时 stop
- 精准监控,不要全链路 *
十、总结一句话
IDEA 用来看代码,Arthas 用来看代码"正在如何运行"。
当你学会把这两个工具结合起来使用:
- 你将不再害怕线上问题
- 能快速定位真实原因
- 排查效率提升数倍
这是 Java 开发从"写代码"走向"能扛线上问题"的重要一步。