Arthas介绍与使用
Arthas(阿尔萨斯)是阿里开源的 Java 线上诊断利器,核心能力是不重启、不改代码,实时排查 JVM 进程的 CPU、内存、线程、类加载、方法入参 / 返回值 / 异常、性能瓶颈等问题,生产环境排障必备Arthas。
一、核心定位与解决痛点
- 无侵入:基于
Java Agent + Instrumentation + ASM,动态 attach 到运行中的 JVM。 - 全场景:支持 JDK6+,跨 Linux/Mac/Windows,兼容 Spring Boot/Dubbo/Tomcat 等主流框架。
- 解决问题:
- 代码没生效?→ 反编译看线上真实代码(
jad) - CPU 飙高?→ 定位最热线程(
thread -n) - 接口慢?→ 追踪调用链耗时(
trace) - 内存泄漏?→ 查对象实例、堆信息(
heapdump) - 类冲突?→ 查类加载来源(
sc)Arthas
- 代码没生效?→ 反编译看线上真实代码(
二、快速安装与启动(推荐 arthas-boot)
bash
运行
# 1. 下载启动器 curl -O https://arthas.aliyun.com/arthas-boot.jar # 2. 启动并选择 Java 进程(输入序号回车) java -jar arthas-boot.jar # 3. 直接指定 PID(免交互) java -jar arthas-boot.jar <PID>成功后进入 Arthas 命令行,也可通过浏览器 Web UI(默认 8563 端口)操作Arthas。
三、高频核心命令(直接复制可用)
1. 全局看板(dashboard)
实时显示 CPU、内存、GC、线程概况,一眼看系统健康度。
bash
运行
dashboard2. 线程排查(thread)
bash
运行
# 查 CPU 最高前 3 线程堆栈 thread -n 3 # 检测死锁 thread -d # 查看指定线程详情 thread <线程ID>3. 类与代码排查(sc/sm/jad)
bash
运行
# 查已加载类(支持模糊匹配) sc com.example.*Controller* # 查类的所有方法 sm com.example.DemoController # 反编译线上类(看真实运行代码) jad com.example.DemoController # 反编译指定方法并保存到文件 jad --source-only com.example.DemoController list > /tmp/DemoController.java4. 方法观测(watch)
最常用:实时看方法入参、返回值、异常,无需加日志。
bash
运行
# 观测入参+返回值(展开 3 层) watch com.example.UserService login "{params,returnObj}" -x 3 # 只看异常 watch com.example.UserService login "{throwExp}" -e -x 2 # 按条件过滤(如用户 ID=1001) watch com.example.UserService login "{params,returnObj}" "params[0].id==1001" -x 35. 性能瓶颈追踪(trace)
定位慢接口中的具体耗时方法:
bash
运行
# 追踪整个调用链 trace com.example.OrderService createOrder # 只显示耗时 >500ms 的链路 trace com.example.OrderService createOrder '#cost > 500'6. 热更新代码(紧急修 Bug)
bash
运行
# 1. 反编译线上代码到文件 jad --source-only com.example.BugClass > BugClass.java # 2. 本地修改 BugClass.java # 3. 编译并热更新 mc /path/to/BugClass.java redefine /path/to/BugClass.class四、工作原理(极简)
- Attach 机制:Arthas 进程通过
VirtualMachine.attach(pid)挂载到目标 JVM。 - Agent 注入:注入
arthas-agent.jar,通过Instrumentation注册字节码增强器。 - 字节码增强:用 ASM 修改目标类字节码,植入监控 / 埋点逻辑(如方法前后切面)。
- 数据回传:目标 JVM 采集数据后通过 Telnet/HTTP 回传给 Arthas 客户端展示。
五、常用命令速查表
表格
| 命令 | 作用 |
|---|---|
dashboard | 全局监控面板 |
thread -n 3 | 查 CPU 最高线程 |
jad <类名> | 反编译线上类 |
watch <方法> | 观测方法入参 / 返回值 |
trace <方法> | 追踪调用链耗时 |
sc <类名> | 查看已加载类 |
sm <类名> | 查看类方法 |
heapdump | 导出堆快照 |
redefine | 热更新类 |
六、总结
Arthas 是 Java 工程师线上排障的必备工具,掌握它能大幅提升问题定位效率,避免 “加日志→重启→复现” 的低效循环。
