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

相关推荐
CodeCaptain7 分钟前
nacos-2.3.2-OEM与nacos3.1.x的差异分析
java·经验分享·nacos·springcloud
Anastasiozzzz1 小时前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
骇客野人1 小时前
通过脚本推送Docker镜像
java·docker·容器
铁蛋AI编程实战1 小时前
通义千问 3.5 Turbo GGUF 量化版本地部署教程:4G 显存即可运行,数据永不泄露
java·人工智能·python
晚霞的不甘1 小时前
CANN 编译器深度解析:UB、L1 与 Global Memory 的协同调度机制
java·后端·spring·架构·音视频
SunnyDays10112 小时前
使用 Java 冻结 Excel 行和列:完整指南
java·冻结excel行和列
摇滚侠2 小时前
在 SpringBoot 项目中,开发工具使用 IDEA,.idea 目录下的文件需要提交吗
java·spring boot·intellij-idea
云姜.2 小时前
java多态
java·开发语言·c++
李堇2 小时前
android滚动列表VerticalRollingTextView
android·java
泉-java2 小时前
第56条:为所有导出的API元素编写文档注释 《Effective Java》
java·开发语言