Arthas 项目介绍
Arthas 是由阿里巴巴开源的一款 Java 诊断工具。该工具为开发者提供了一种无需修改代码或重启服务,就能解决生产环境 Java 应用故障的途径。
项目背景
在许多时候,生产系统的网络是无法从本地开发环境访问的。如果在生产系统中遇到问题,无法使用 IDE 进行远程调试。此外,在生产环境中调试也是不可行的,因为这会挂起所有线程,导致业务服务暂停。开发者可以尝试在测试或预发布环境中重现这些问题,但是某些问题很难在不同环境中重现,甚至在 JVM 重启后,问题可能会消失。
如果考虑通过在代码中添加日志来帮助定位问题,那么整个过程需要经过测试、预发布再到生产,这既消耗时间又不高效。为了解决这些问题,Arthas 被开发出来,允许开发者无需重启 JVM 或更改代码,就能即时地对生产问题进行诊断。
关键特性
Arthas 提供了一系列强大的功能,以帮助开发者定位和解决问题:
- 检查类是否被加载,或类加载的位置(方便解决 JAR 文件冲突问题)。
- 反编译类以确保代码按预期运行。
- 查看类加载器统计信息,例如类加载器数量、每个类加载器加载的类数、类加载器层次结构、可能存在的类加载器泄漏等。
- 查看方法调用详细信息,如方法参数、返回对象和抛出的异常。
- 检查指定方法调用的堆栈跟踪,用于了解方法调用者。
- 跟踪方法调用,查找缓慢的子调用。
- 监控方法调用统计信息,如每秒请求数 (QPS)、响应时间 (RT)、成功率等。
- 监控系统指标、线程状态及 CPU 使用率、垃圾回收 (GC) 统计等。
- 支持命令行交互模式,自动补全功能。
- 支持 Telnet 和 WebSocket,提供本地和远程诊断。
- 支持 profiler/火焰图。
- 从堆中获取某类的实例对象。
- 支持 JDK 6+(4.x 版本不再支持 JDK 6 和 JDK 7)。
- 支持 Linux/Mac/Windows 平台。
快速入门
使用 arthas-boot
(推荐)
可以通过以下命令快速下载并启动 Arthas:
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
查看使用说明:
java -jar arthas-boot.jar -h
使用 as.sh
在 Linux、Unix 和 Mac 平台上,可以通过以下单行命令安装 Arthas:
curl -L https://arthas.aliyun.com/install.sh | sh
执行上述命令后,as.sh
启动脚本会下载到当前目录。可以将其移动到其他位置,或将其路径加入到 $PATH
中。
通过执行 as.sh
进入交互界面,或执行 as.sh -h
获取更多帮助信息。
常用功能展示
- Dashboard: 提供系统状态的一览概况。
- Thread: 分析哪些线程消耗 CPU,查看线程的详细堆栈信息。
- Jad: 反编译类文件,查看实际运行的 Java 代码。
- Monitor: 监控特定方法的调用统计。
- Time Tunnel (tt): 记录方法调用,用于事后查看调用参数、返回值和异常。
Web 控制台
Arthas 提供了直观的 Web 控制台界面,方便用户进行交互式操作。
已知用户
Arthas 已经被 120 多家注册用户采用,遍布阿里巴巴、支付宝、云计算等知名企业。
衍生项目
Arthas 项目催生了一些相关的衍生项目,如 Bistoury,一个集成了 Arthas 的项目,以及使用 MVEL 的 Arthas 修改版。
Arthas 是 Java 社区一个重要的开源工具,凭借其丰富的功能和便捷的使用方式,极大地节省了开发者排查 Java 应用程序问题的时间和精力。无论是初学者还是资深开发者,Arthas 都可以成为排查 Java 生产环境问题的有力助手。