Arthas(阿尔萨斯)是 Alibaba 开源的一款 Java 诊断工具,使用它我们可以监控和排查 Java 程序,然而它还提供了非常实用的 Java 热更新功能。
所谓的 Java 热更新是指在不重启项目的情况下实现代码的更新与替换。使用它可以实现不停机更新 Java 程序,尤其是对那些启动非常耗时的 Java 项目来说,更是效果显著。
Arthas 的使用其实非常简单,它为我们提供了一个 Jar 包,我们只需要把这个 Jar 下载到本地,然后运行这个 Jar 包就可以正常使用它的功能了。
Arthas 功能简述
当你遇到以下类似问题而束手无策时,Arthas 可以帮助你解决(来自官方):
- 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
- 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
- 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
- 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
- 是否有一个全局视角来查看系统的运行状况?
- 有什么办法可以监控到JVM的实时运行状态?
- 怎么快速定位应用的热点,生成火焰图?
Arthas 支持 JDK 6+,支持 Linux/Mac/Winodws,它采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。
Arthas 使用
Arthas 的使用步骤如下。
步骤一:下载 Arthas
首先,我们先把 Arthas 的 Jar 包下载到本地,它的下载地址是:https://alibaba.github.io/arthas/arthas-boot.jar
步骤二:启动 Arthas
我们只需要使用普通的 jar 包启动命令:java -jar arthas-boot.jar
来启动 Arthas 即可,启动成功之后的运行界面如下:
如上图所示则表示 Arthas 启动成功。
小贴士:当我们运行 java -jar arthas-boot.jar 命令时,首先需要先切换目录至该 jar 包的位置,才能正常的启动 Arthas。
步骤三:运行 Arthas
当我们启动完 Arthas 之后,根据上图的提示,我们需要选择一个要调试的 Java 进程,例如我们输入“4”来监测我自己写的一个 Java 测试程序,执行结果如下:
当出现 Arthas 的 logo 之后,表示 Arthas 正常加载了 Java 进程。
步骤四:操作 Arthas
当 Arthas 加载 Java 进程成功之后,我们就可以输入相关的命令来查看相关的信息了。
假如我们把本地环境视为生产服务器,我们此时需要查看某个运行的 Java 程序是否为最新版的。
在没有 Arthas 之前,我们通常的步骤是这样的:
- 找到相应的 jar 包(或者 war 包);
- 将 jar 包(或者 war 包)下载到本地;
- 找出相应的类进行解压操作;
- 然后将解压的 class 文件拖拽到 Java 编译器(Idea 或 Eclipse)中,查看是否为最新的代码。
但如果使用的是 Arthas,那么我们就可以直接通过反编译命令,将字节码编译为正常的 Java 代码,然后再确认是否为最新的代码即可。我们只需要执行 jad
命令即可,实现示例如下:
这样我们就可以直接来查看这个发布的程序是否为最新版本了。
不仅如此,我们还可以使用 Arthas 来监测整个程序的运行情况,如下图所示:
我们还可以用 Arthas 来查看一些 JVM 的相关信息,如下图所示:
更多 Arthas 的功能,请访问:https://alibaba.github.io/arthas/commands.html