Arthas

关注
义项:Java 诊断工具
Arthas

Arthas 是阿里巴巴开源的 Java 应用在线诊断工具,主要用于排查生产环境中 Java 应用的运行故障。它借助字节码增强技术附着到目标 Java 虚拟机(JVM)进程上,能够在不修改业务代码、不重启服务的前提下查看方法调用链路、入参返回值、异常与执行耗时,并观察内存、线程和垃圾回收状态[1][2]。该工具于 2018 年 9 月开源,采用命令行交互方式,同时提供浏览器端控制台[3][4]。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

Arthas 是一款面向 Java 应用的线上监控与诊断产品,由阿里巴巴中间件团队开发并以开源方式发布[1][5]。它以全局视角实时呈现应用的负载、内存、垃圾回收与线程状态,并能在业务代码保持不变的情况下定位问题[1]。使用方法是在服务器上执行启动脚本或运行引导程序,从系统当前运行的 Java 进程列表中选择目标进程,Arthas 随后附着到该进程并进入交互界面[6]。

原理

Arthas 的无侵入诊断能力建立在 Java Instrumentation API 与 ASM 字节码操作框架之上[7]。其工作流程大致为:通过 Attach 机制把代理注入目标 JVM,注册字节码转换器,再对指定类进行重定义[8]。执行 trace 或 watch 一类命令时,工具会在目标方法的入口与出口插入字节码,用于统计耗时、捕获参数与返回值,这些改写属于临时性质,Arthas 退出后会被还原[7]。

由于观测逻辑以观察者身份运行,Arthas 不会暂停正在执行的线程,因此不会造成服务中断[1]。诊断数据既可通过命令行终端输出,也可经 HTTP 接口以 JSON 格式返回,便于程序化处理[9]。

发展历程

Arthas 的雏形在阿里巴巴内部出现于 2015 年,当时团队为提高微服务线上问题的排查效率,选择在 Greys 项目基础上进行开发[10]。经过数年的内部使用后,该项目于 2018 年 9 月 28 日正式对外开源,首个正式版本发布后 147 天,其代码托管平台上的收藏数突破一万[10]。

此后版本迭代持续推进。3.1.0 版加入内存编译器命令,配合反编译与字节码替换命令形成在线热更新的完整链路,并支持在 Docker 环境中诊断 Java 进程[11]。这一时期还换用了新的字节码增强框架,解决了多个增强命令作用于同一个类时相互冲突的问题,并补全了 HTTP 接口与统一的鉴权方案[9]。到 2024 年,项目开始把 3.x 与 4.x 两条版本线分开维护,4.x 要求 JDK 8 及以上[12][13]。

2026 年,Arthas 推出了实验性的 MCP 服务模块,把常用诊断命令封装成可供人工智能客户端调用的工具接口,使诊断过程可以由自然语言驱动[7]。该模块对外提供 JSON-RPC 2.0 接口,并区分流式与无状态两种协议模式[7]。

应用

Arthas 的典型用途是排查生产环境中的疑难问题。它可以帮助判断某个类由哪个 JAR 包加载、解释类相关的异常成因、确认代码是否真正被执行到,以及查看某个用户数据处理异常时的调用细节[1]。

在性能分析方面,profiler 命令通过持续采样生成火焰图,用于定位应用热点;火焰图以横条表示函数,宽度对应被采样到的次数,出现平坦顶部通常意味着该函数存在性能瓶颈[6]。线程相关命令可输出 CPU 占用较高的线程堆栈,并支持自动检测死锁[14]。

对于批量部署的场景,Arthas 提供隧道组件,由服务端集中接收各台机器上代理的注册连接,诊断人员通过浏览器输入代理标识即可远程接入目标进程。阿里云的应用实时监控服务与 Serverless 应用引擎也集成了 Arthas 的诊断能力,以控制台形式提供内存概览、线程耗时分析与方法执行分析等功能[15][2]。

在工程实践中,热替换功能支持在线修改已加载类的方法体,用于紧急修复线上缺陷而不重启服务,常见路径是先反编译取得源码、修改后编译,再载入新的字节码[14]。此外,时间隧道命令会记录方法每次调用的上下文,允许事后回放历史调用以复现偶发问题[16]。

局限

字节码增强存在明确边界。重定义类时只能修改方法体,不能新增字段、方法或构造函数,也不能改动继承关系、实现的接口与方法签名,否则会抛出异常[14][8]。受 JVM 限制,final 类与 final 方法无法被修改;在线改动的结果不会持久化,JVM 重启后即失效,永久修复仍需更新代码并重新发布[8][14]。

增强逻辑本身会带来一定性能开销,因此官方建议仅在排查问题时开启诊断,问题解决后关闭相关功能[15]。部分能力还存在平台差异,例如 profiler 在 Linux 上功能完整,Mac 上仅支持一部分,Windows 上则不支持[6]。

使用条件方面,Arthas 与目标进程需要具备相同的用户权限,否则可能出现附着失败或访问权限相关的问题[6]。默认情况下它只监听本机地址,若通过参数将端口暴露到网络,任何能够访问该端口的人都可以执行全部诊断命令,包括动态修改类与执行表达式,因而存在安全风险[17]。此外,早期版本支持的 JDK 6 与 JDK 7 已不在 4.x 的支持范围内[18]。

参见

  • Java 虚拟机 —— Arthas 诊断的目标运行环境,内存、线程与垃圾回收状态都在其中呈现。

  • 字节码增强 —— Arthas 实现无侵入观测所依赖的核心技术路线。

  • 火焰图 —— profiler 命令生成的性能可视化结果形式。

  • 阿里巴巴 —— Arthas 的开发方与开源发布方。

  • 模型上下文协议 —— Arthas 于 2026 年接入的工具接口协议。

  • Greys —— Arthas 早期开发所基于的开源项目。

词条评价
词条统计

浏览次数:2 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T21:59:51Z

历史版本

本条目引用的词条
Java 虚拟机 字节码增强 火焰图 阿里巴巴 模型上下文协议 Greys