Arthas:阿里开源的 Java 线上问题排查工具

做 Java 开发的人,最怕线上出 bug。本地复现不了,加日志要重新部署,远程调试又怕影响业务。一套流程走完,半天就没了,问题可能还解决不了。

阿里的 Arthas 就是干这个的。3.7 万 Star,开源好几年,一直在维护。它的核心能力是:不改代码、不重启服务,直接对运行中的 Java 应用做诊断。你只需要把它 attach 到目标进程上,就能看到方法调用、线程状态、类加载情况,还能在线反编译代码。

正文顶部截图

解决什么问题

生产环境的问题有几个特点:不好复现,不能随便动,加日志周期太长。很多 bug 重启后就消失,加断点调试又会挂起所有线程。

Arthas 的思路是从 JVM 层面直接观察。它作为"旁路观察者"接入目标进程,不影响原有线程运行,却能看到方法调用、参数返回值、线程状态这些关键信息。

能做什么

挑几个实用的说:

查看方法调用细节。 watch 命令监控指定方法的入参、返回值和异常。线上接口偶发报错,直接 watch 就能看到是哪个参数出了问题,不用加日志重新部署。

反编译类。 jad 命令直接查看线上运行的代码。以为部署了最新版,实际上可能没更新成功,一看便知。排查 jar 包冲突时也用得上。

追踪方法耗时。 trace 命令拆解方法内部每个子调用的耗时。接口响应慢但不知道慢在哪一步,trace 能直接定位到具体是哪个子调用拖慢了整体。

监控方法统计。 monitor 命令每隔几秒输出调用次数、平均耗时、成功率,相当于给方法加了实时监控面板,还不用改代码。

查看线程和 CPU。 thread 命令列出 CPU 占用最高的线程和堆栈,几秒钟定位资源消耗点。线上 CPU 飙高的时候特别好用。

堆对象查看。 vmtool 命令能获取堆中指定类的实例,排查内存泄漏或者查看某个对象当前状态时很实用。

README区域截图

怎么用

下载一个 arthas-boot.jar,用 java 命令启动,选择要诊断的 Java 进程就行。不用改应用的启动参数,不用加依赖,连代码都不用碰。启动后进入交互式命令行,支持 Tab 自动补成。除了命令行,还提供 Web Console,浏览器里也能操作。支持 telnet 和 WebSocket 两种连接方式,本地和远程都能用。Linux、Mac、Windows 都支持,JDK 8 到 JDK 25 兼容。

适合什么场景

线上接口偶发超时,需要定位是哪个环节慢了。部署后怀疑代码没更新,想确认线上实际运行的版本。CPU 突然飙高,需要快速找到占用资源的线程。排查类加载冲突,比如同一个类被多个 ClassLoader 加载。想给某个方法加监控,但不想改代码重新部署。这些场景 Arthas 都能覆盖,而且不需要停服。

一点不足

功能虽然多,但学习成本不低。命令参数比较复杂,新手需要花时间熟悉文档。另外它是命令行工具,界面上不如商业 APM 产品直观,习惯了图形化监控的团队可能需要适应。

总体评价

Arthas 是那种"用了就离不开"的工具,把线上 Java 诊断这件事做到了高完成度,而且完全免费开源。3.7 万 Star 不是白来的,是大量开发者在实际生产中用出来的口碑。

如果你是 Java 后端开发,还没用过 Arthas,建议花半小时把它跑起来试试。线上排查的效率提升是实实在在的。

a 后端开发,还没用过 Arthas,建议花半小时把它跑起来试试。线上排查的效率提升是实实在在的。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐