Arthas
This content is not available in your language yet.
Arthas 把 JVM Attach、字节码重转换、命令执行和终端协议组合成一套在线诊断系统;读码重点是“命令如何变成 transformer,再如何把结果流回终端”。
本册问题地图
Section titled “本册问题地图”Arthas 的源码主线是“附着目标 JVM → 解析命令 → 动态增强 → 收集和渲染结果”:
- Agent 如何进入目标进程? 通过 Attach 机制加载诊断代码,再建立命令通道;目标 JVM 的权限、模块和运行状态决定附着是否成功。
- 命令模型为什么和渲染层分离? 命令负责查询和控制,渲染负责把结果变成人可读输出,同一诊断能力才能复用于不同终端。
- retransform 改变了什么? 它不是读取现成信息,而是修改运行中类的字节码,让后续调用经过新的观测逻辑。
- 为什么必须限制增强范围? 热方法、递归调用和高频请求会把诊断开销放大;类、方法、条件和次数都应可控。
- 诊断工具如何避免制造事故? 超时、采样、最大输出和及时恢复原字节码,都是把观测成本限制在可接受范围内。
| 项 | 值 |
|---|---|
| 仓库 | alibaba/arthas |
| 本地路径 | E:\source\java\tools\arthas |
| 分支 | master |
| Commit | a5ecd7a8(2026-08-14) |
| 最近 tag | arthas-all-4.3.4 |
| 模块 | 职责 | 入口 |
|---|---|---|
agent |
premain/agentmain 启动 | AgentBootstrap |
core |
命令、增强器、Shell | ArthasBootstrap、Enhancer |
client |
Telnet/HTTP 客户端 | TelnetConsole |
spy |
引导类可见的轻量 API | SpyAPI |
arthas-agent-attach |
外部 Attach | ArthasAgent |
ArthasAgent#init获取Instrumentation。AgentBootstrap#agentmain将控制权交给核心包。ArthasBootstrap#getInstance启动 Shell 和命令解析。Enhancer#enhance注册 transformer 并触发重转换。