Arthas 是阿里巴巴开源的一个 Java 诊断工具,支持 JDK 6+,能够在 Linux、Windows 和 MacOS 平台上运行,主要面向在线上应用的实时监控和故障定位。它可以帮助开发者在不修改代码的情况下分析和诊断 Java 应用,包括类加载情况、JVM 内存状态、线程状态、方法执行耗时等。
Java Agent
Java Agent 是 Arthas 实现核心功能的基础。Java Agent 是一种特殊的 Java 程序,它可以在 JVM 启动时或运行时加载。通过 Java Agent,Arthas 可以在不改变应用源代码的情况下,注入代码逻辑,用于监控或修改应用程序的行为。
Instrumentation API
Instrumentation API 是 Java 提供的一个强大的工具,用于动态修改字节码。Arthas 利用 Instrumentation API 实现了对应用程序的字节码增强。在程序运行时,Arthas 可以通过该 API 动态修改类的方法体,插入自定义的监控代码,例如在方法的开始和结束时记录日志、计算方法执行时间等。
Attach API
Attach API 是 Java 6 引入的一个 API,允许一个 Java 进程动态附加到另一个运行中的 Java 进程。Arthas 利用 Attach API 将自身的 Java Agent 动态附加到目标 JVM 上,进而实现对目标应用的监控。通过 Attach API,Arthas 可以在无需重启目标应用的情况下,动态加载和卸载自己的监控代码。
字节码操作库ASM
Arthas 使用了字节码操作库ASM来实现字节码增强。ASM允许开发者以较高的抽象层次来操作和修改 Java 字节码,而无需直接处理复杂的字节码格式。通过这些库,Arthas 能够高效地插入监控代码并修改现有类的行为。
Ognl (Object-Graph Navigation Language)
Ognl 是一个表达式语言,Arthas 使用它动态执行复杂的 Java 表达式。通过 Ognl,用户可以在运行时对 Java 对象进行深入操作和查询,而无需编写新的代码。