Arthas 实战指南:结合 IDEA 的 Java 线上排查完整流程

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 开发从"写代码"走向"能扛线上问题"的重要一步。

相关推荐
云烟成雨TD1 天前
Spring AI Alibaba 1.x 系列【6】ReactAgent 同步执行 & 流式执行
java·人工智能·spring
于慨1 天前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
swg3213211 天前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
gelald1 天前
SpringBoot - 自动配置原理
java·spring boot·后端
殷紫川1 天前
深入理解 AQS:从架构到实现,解锁 Java 并发编程的核心密钥
java
一轮弯弯的明月1 天前
贝尔数求集合划分方案总数
java·笔记·蓝桥杯·学习心得
chenjingming6661 天前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter
殷紫川1 天前
深入拆解 Java volatile:从内存屏障到无锁编程的实战指南
java
eddieHoo1 天前
查看 Tomcat 的堆内存参数
java·tomcat
那个失眠的夜1 天前
Mybatis延迟加载策略
xml·java·数据库·maven·mybatis