上传者: 38714653
|
上传时间: 2025-12-04 01:11:12
|
文件大小: 62KB
|
文件类型: PDF
Java开源诊断工具Arthas使用方法详解
Arthas是阿里巴巴开源的Java诊断工具,能够附加到Java服务器进程上,查看服务器状态、JVM状态等各种参数指标,还可以进行热更新。下面是Arthas使用方法详解:
一、前言
在 Java 开发和生产环境中,服务器出现问题时,需要追加打印日志或者增加一些调试代码。如果我们去改代码重新部署,会破坏问题现场。 Arthas 可以通过热部署的手段来增加调试代码。
二、使用 Arthas
Arthas 可以附加到我们的 Java 服务器进程上面,查看服务器状态、JVM 状态等各种参数指标,还可以进行热更新。使用 Arthas 需要下载 Arthas 的 Boot Jar 包,命令如下:
wget https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
启动后会显示当前机器上面所有的 Java 进程,选择我们需要监控/修改的进程,输入序号回车。
常用命令包括:
* dashboard:当前系统的实时数据面板
* thread:查看当前 JVM 的线程堆栈信息
* jvm:查看当前 JVM 的信息
* sysprop:查看和修改 JVM 的系统属性
* sysenv:查看 JVM 的环境变量
* getstatic:查看类的静态属性
例如,打印前五名最消耗 CPU 的线程,可以及时找到 CPU 过高的代码位置:
thread -n 5
查看某个函数的调用堆栈:
stack <类全包名> <函数名>
查看某个函数的哪个子调用最慢:
trace <类全包名> <函数名>
监控某个函数的调用统计数据:
monitor <类全包名> <函数名>
三、热更新
热更新是 Arthas 的一大特性。下面是热更新的步骤:
1. 找到我们需要更新代码的全包名,通过 jad 命令将线上正在运行的代码反编译出来:
jad --source-only <全包名> > <导出目录+文件名>
2. 拿到 Java 代码后,我们根据需求来修改代码,需要注意的是这里热更新代码的实际原理是调用 Java 基础类 java.lang.instrument.Instrumentation 的 redefineClasses 方法,他可以通过修改字节码来替换已有的 class 文件,其中有诸多的限制。
3. 修改好代码后,我们要找到这个类对应的类加载器,再去加载这个 class,执行如下命令会返回类加载器的对象地址:
sc -d <全包名> | grep classLoaderHash
4. 通过内存编译将 Java 文件编译成 Class 文件:
mc -c <类加载器的对象地址>
5. 我们通过命令将 class 文件进行热更新:
redefine
更新完毕不出意外会立即生效,这时候就可以去验证代码是否生效了。
Arthas 是一个功能强大且实用的 Java 诊断工具,可以帮助我们快速诊断和解决问题。