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

相关推荐
程序员清风6 小时前
程序员兼职必看:靠谱软件外包平台挑选指南与避坑清单!
java·后端·面试
皮皮林5517 小时前
利用闲置 Mac 从零部署 OpenClaw 教程 !
java
华仔啊12 小时前
挖到了 1 个 Java 小特性:var,用完就回不去了
java·后端
SimonKing13 小时前
SpringBoot整合秘笈:让Mybatis用上Calcite,实现统一SQL查询
java·后端·程序员
日月云棠1 天前
各版本JDK对比:JDK 25 特性详解
java
用户8307196840821 天前
Spring Boot 项目中日期处理的最佳实践
java·spring boot
JavaGuide1 天前
Claude Opus 4.6 真的用不起了!我换成了国产 M2.5,实测真香!!
java·spring·ai·claude code
IT探险家1 天前
Java 基本数据类型:8 种原始类型 + 数组 + 6 个新手必踩的坑
java
花花无缺1 天前
搞懂new 关键字(构造函数)和 .builder() 模式(建造者模式)创建对象
java
用户908324602731 天前
Spring Boot + MyBatis-Plus 多租户实战:从数据隔离到权限控制的完整方案
java·后端