言简意赅的讲解Arthas IDE 插件解决的痛点
之前给大家讲解了使用Arthas与Eclipse Memory Analyzer的完整指南,但是很多同学觉得Arthas部分还不够细。
以下内容将详细讲解 Arthas IDE 插件 的使用方法,包括 服务器端安装 Arthas、IntelliJ IDEA 插件安装与配置、如何观察方法变量的传入,以及一些 常用的 Arthas 命令。希望能帮助大家更轻松地进行线上问题诊断与性能调试。
一、服务器端安装 Arthas
1. 下载并启动 Arthas
(1)下载 Arthas
curl -O https://arthas.aliyun.com/arthas-boot.jar
也可以从 Github 上下载最新版本。
(2)启动 Arthas
java -jar arthas-boot.jar
此时,Arthas 会扫描当前服务器上运行的所有 Java 进程,并列出进程 ID 和进程信息。例如:
* [1]: com.example.DemoApplication
输入需要诊断的进程编号(如 1
)后回车,即可进入该进程的 Arthas 控制台。
2. 进入 Arthas 控制台
进入控制台后,你会看到类似:
[arthas@xxx]$
此时即可输入各种命令进行调试。
二、IntelliJ IDEA 安装 Arthas IDE 插件
1. 打开插件市场并安装
- 启动 IntelliJ IDEA,进入主界面后,点击顶部菜单
File -> Settings
(Windows。 - 在左侧导航中选择
Plugins
。 - 在右侧的搜索框中输入
Arthas
。 - 找到插件后,点击
Install
安装。
2. 重启并打开 Arthas 工具窗口
安装完成后,会提示重启 IntelliJ IDEA,点击 Restart
。
三、观察一个方法的变量传入
在使用 Arthas 时,最常见的需求之一就是“想查看某个方法的入参以及返回值”。下面演示使用 tt
命令来捕获目标方法的入参与返回值。
1. 确定要监控的方法
假设需要监控:
- 类名:
com.example.service.UserService
- 方法:
login(String username, String password)
2. 捕获方法调用
首先,在 Arthas 控制台中输入:
tt -t com.example.service.UserService login -n 5
含义:
tt
:Trace Table 命令,捕获方法的调用。-t
:追踪目标方法的调用。com.example.service.UserService
:类的全限定名。login
:方法名称。-n 5
:最多捕获 5 次调用。
执行后,Arthas 会提示你已监听到某些调用,并给出一个或多个调用的 INDEX
,如:
INDEX TIMESTAMP COST(ms) IS-RE IS-EX OBJECT CLASS METHOD
1000 2025-01-02 10:00 5.1234 true false 0x12345678 UserService login
3. 查看捕获的调用详情
假设想查看 INDEX=1000
的详细调用信息:
tt -i 1000
输出示例:
INDEX 1000
GMT-CREATE 2025-01-02 10:00:00.123
COST(ms) 5.1234
OBJECT 0x12345678
CLASS com.example.service.UserService
METHOD login
IS-RETURN true
IS-EXCEPTION false
PARAMETERS[0] @String[user_123]
PARAMETERS[1] @String[password_456]
RETURN-OBJ @String[token_xyz]
PARAMETERS[0]
和PARAMETERS[1]
就是这个方法的两个入参。RETURN-OBJ
即该方法的返回值。
4. 增强打印(可选)
如果方法有复杂对象,需要查看内部属性,可以使用 -x
参数增强打印深度:
tt -i 1000 -x 3
这里 -x 3
表示打印对象的 3 层嵌套属性。
四、Arthas 常用工具命令
Arthas 提供了非常多的命令来帮助我们进行线上问题诊断和性能分析。以下列出几条常用命令,供日常开发排查参考:
-
dashboard
- 作用:实时展示当前 JVM 的概览信息,包括线程、CPU、GC 等。
- 使用:
dashboard
-
thread
- 作用:查看线程的运行状态,特别适合排查线程阻塞、高 CPU 消耗等。
- 常用参数:
-n 3
:查看 CPU 占用率最高的 3 个线程。
thread -n 3
-
trace
- 作用:方法调用链路追踪,显示方法内部各个调用的耗时,便于找出性能瓶颈。
- 示例:
trace com.example.service.UserService login
-
watch
- 作用:实时监控方法的入参、返回值或异常。
- 示例:监控
login
方法的入参和返回值watch com.example.service.UserService login '{params, returnObj}' -x 2
-x 2
:打印时对象展开 2 层。
-
heapdump
- 作用:导出当前 JVM 的内存快照,以排查内存泄露、GC 问题等。
- 示例:
heapdump /tmp/arthas_dump.hprof
-
classloader
- 作用:查看当前 JVM 中的类加载器信息,帮助排查类冲突或重复加载等问题。
-
jad
(Java Decompiler)- 作用:反编译指定类的字节码,查看源码(若源码缺失或不一致时非常有用)。
- 示例:
jad com.example.service.UserService
五、总结
- 服务器安装 Arthas:通过下载
arthas-boot.jar
,简单执行java -jar arthas-boot.jar
进行安装与启动。 - IntelliJ IDEA 插件:在
Settings -> Plugins
中搜索并安装Arthas
插件,然后重启 IntelliJ IDEA 即可使用。 - 观察方法变量的传入:使用
tt
命令捕获方法调用记录,查看-i <INDEX>
详细信息;如有复杂对象,可搭配-x <depth>
增强打印。 - 常用命令:
dashboard
,thread
,watch
,trace
,heapdump
,classloader
,jad
等,非常适合定位性能瓶颈、线程问题、内存泄露等一系列线上故障。
借助 Arthas 强大的诊断能力和 IntelliJ IDEA 插件的可视化管理,我们可以对线上的 Java 应用进行快速高效的故障排查、性能分析、问题定位,极大提升开发者的工作效率。希望这篇教程能帮助你更好地掌握和使用 Arthas。
通过上述内容,你就已经基本理解了这个方法,基础用法我也都有展示。如果你能融会贯通,我相信你会很强
Best
Wenhao (楠博万)