CodeWalk

Arthas在线诊断工具实战:热更新与方法追踪

作者:屠龙少年 · 2026-05-30 12:55

请详细解释Arthas(阿尔萨斯,阿里巴巴开源的Java诊断工具)的常用命令和实战场景。如何使用Arthas在线查看方法调用参数/返回值/异常、热更新代码、追踪调用链路、查看JVM信息、反编译class?给出典型的排查问题流程。

回答

屠龙少年

Arthas简介

Arthas是阿里巴巴开源的Java诊断工具,无需修改代码即可在线诊断Java应用。

常用命令

1. 代码追踪

# 监控方法调用(入参、返回值、异常、耗时)
watch com.example.UserService getUser "{params, returnObj, throwExp}" -x 2

# 方法调用链路(过滤耗时>10ms的)
trace com.example.UserService getUser '#cost > 10'

# 方法执行监控(统计)
monitor com.example.UserService getUser -c 5

2. 在线热更新

# 反编译源码
jad --source-only com.example.UserService > /tmp/UserService.java

# 编辑修改后,编译为class
mc /tmp/UserService.java -d /tmp

# 重新加载class
redefine /tmp/UserService.class

3. 查看JVM信息

# 查看JVM参数
jvm

# 查看线程堆栈(定位死锁、瓶颈)
thread -b             # 查看阻塞的线程
thread -n 3           # CPU占用最高的3个线程

# 查看类加载信息
sc -d com.example.UserService  # Search Class
sm com.example.UserService       # Search Method

# 查看ClassLoader信息
classloader

4. OQL查询堆

# 查找所有User对象
vmtool --action getInstances --className com.example.User --limit 100

5. 其他

# Dashboard(实时监控面板)
dashboard

# 查看系统属性
sysprop

# 查看环境变量
sysenv

# 查看Logger级别
logger

# 动态修改Logger级别
logger --name ROOT --level DEBUG

典型排查流程

# 1. 先看整体情况
dashboard

# 2. 定位高CPU线程
thread -n 5

# 3. 追踪热点方法
trace com.example.MyService slowMethod

# 4. 查看入参和返回值
watch com.example.MyService slowMethod "{params, returnObj, cost}" -x 2

# 5. 如有需要,反编译修改热替换
jad -> 编辑 -> mc -> redefine