Arthas 的进程模型
Arthas 本身是一个基于 Java Agent 机制的诊断工具,它的运行分为两个关键环节,但并非 "两个独立进程":
- 主控端(CLI) :你在终端输入命令的 Arthas 客户端(
arthas-boot.jar启动的进程),本质是一个 Java 进程,负责接收你的命令、解析并发送到目标进程。 - 代理端(Tools) :通过
VirtualMachine.attach()动态附加到目标 Java 进程的 Agent 代理(核心是arthas-core.jar),它运行在目标进程的内部,而非独立进程。
简单说:
- CLI 是独立的 "控制进程";
- Tools/Agent 是嵌入目标进程的 "代理线程 / 模块";
- 二者通过 Socket 通信,并非两个对等的独立进程。
2. "合并到一个 JAR 包" 的本质
Arthas 把 arthas-core.jar(代理逻辑)、arthas-cli.jar(命令行交互)、依赖库等打包到 arthas-boot.jar 中,目的是:
- 简化部署:用户只需下载一个 JAR 就能使用所有功能;
- 自动分发:启动时
arthas-boot.jar会自动把内部的 Agent 包注入目标进程,无需手动拆分 JAR。
这个 "合并" 只是打包层面的整合,运行时依然是 "主控进程 + 目标进程内的 Agent 模块" 的模式。
3. 关键区别:进程 vs 线程
表格
| 组件 | 运行载体 | 角色 |
|---|---|---|
| Arthas CLI | 独立 Java 进程 | 命令输入 / 解析 / 结果展示 |
| Arthas Agent | 目标 Java 进程的内部线程 | 执行诊断逻辑(监控 / 反编译等) |
总结
- Arthas 不是 "两个进程",而是一个主控进程 + 目标进程内的 Agent 模块;
- "CLI 和 Tools 合并到一个 JAR" 是打包优化,方便使用,不改变运行时的进程模型;
- Agent 核心逻辑运行在目标进程内部,而非独立进程,这也是 Java Agent 的核心特性。