Arthas 实现原理¶
一、是什么¶
阿里巴巴开源的 Java 诊断工具,在线诊断,不用重启。
二、能做什么¶
- 看方法调用、耗时。
- 看 JVM 信息。
- 反编译类。
- dump heap。
- 监控方法异常。
三、原理¶
1. Java Agent¶
Arthas 以 Java Agent 附加到目标 JVM:
2. Attach API¶
连接到运行中的 JVM。
3. ByteBuddy 字节码增强¶
方法被调用时,插入统计逻辑: - 记录耗时。 - 记录入参/出参。 - 抛异常时记录。
4. 不修改代码¶
通过 Instrumentation.retransformClasses(),在运行时重新定义类。
四、核心命令¶
| 命令 | 作用 |
|---|---|
| dashboard | 实时面板 |
| thread | 线程栈 |
| jad | 反编译 |
| watch | 方法入参出参 |
| trace | 方法调用链耗时 |
| profiler | 火焰图 |
五、为什么不用重启¶
Attach API 允许运行时加载 agent,重新定义类。业务无感。
六、注意¶
- 生产用要小心,字节码增强有开销。
- 用完 shutdown。
一句话
Arthas = Java Agent + Attach API + 字节码增强。