arthas v3.6.9 使用教程

发布时间 2023-07-12 14:35:49作者: 不该懂的还是懂了

Arthas是一个开源的Java诊断工具,由Alibaba开发和维护。它提供了一套强大的命令行工具,可以帮助开发人员在运行时对Java应用进行故障排查和性能分析。

Arthas具有以下主要功能和特点:

  1. 实时追踪和查看Java应用的方法调用栈,包括实例、静态方法的调用情况。
  2. 动态修改类的字节码,比如修改方法的返回值或增加打印语句,以帮助进行调试。
  3. 监控Java方法的运行时间、调用次数和异常信息。
  4. 查看JVM的线程信息、内存信息、GC情况等。
  5. 支持在线诊断和分析生产环境中的Java应用,无需重启或修改代码。

您可以通过以下步骤开始使用Arthas:

  1. 在Arthas官方网站(https://arthas.aliyun.com/)下载Arthas的压缩包。

    从 Maven 仓库下载

    最新版本,点击下载:在新窗口打开

    #从 Github Releases 页下载

    https://github.com/alibaba/arthas/releases在新窗口打开

  2. 解压缩下载的包,并进入解压后的目录。
  3. 执行./as.sh(对于Windows系统,执行as.bat)命令启动Arthas。
  4. 在Arthas的命令行界面中,输入不同的命令以实现特定功能。您可以通过help命令获取帮助信息,了解可用的命令和用法。

常见操作的使用

  • help指令查看arthas可以使用的指令

image-20230313103123400

  • 使用dashboard命令查看线程基本信息、内存中堆栈分配情况、系统环境信息,使用Ctrl+z退出

image-20230313103205392

  • 使用thread指令查看所有线程

image-20230313103236295

  • 使用jad指令查看反编译的类信息
jad BaseController

分析方法耗时,java方法耗时过长分析

  • 使用trace指令分析指定方法的耗时,需要访问接口才会进入到监听
trace com.luntek.certificate.api.UserController getUserBaseInfo -n 1

格式: trace + 类所在包 + 类全称 + 空格 + 方法名

如果方法调用的次数很多,那么可以用-n参数指定捕捉结果的次数。比如上面的例子里,捕捉到一次调用就退出命令

然后我们执行上面的命令

image-20230313103034408

  • 热更新功能(sc与redefine指令)

在代码中增加相应的日志代码,并且将相应的Java代码文件编译成class字节码文件***.class,可以使用mvn指令打包整个项目或者使用javac指令获取class文件,将字节码文件上传到生产服务器

并且使用sc命令查找对应的字节码文件(因为我们要替换它),并且要找到它的类加载哈希码,因为是类加载器加载类,所以我们需要使用同一个类加载器才行。

# 获取要修改的类信息
sc -d *UserController*
# 获取类加载器的哈希值,多个是因为有接口与实现类,我这里找到的是 5197848c
sc -d *UserController* | grep classLoaderHash

image-20230313115015477

替换字节码文件,将刚上传到服务器的字节码文件加载到JVM中,使用redefine命令进行替换

redefine -c 5197848c /usr/local/arthas/UserController.class

image-20230313115346997

查看日志与修改的代码,代码生效

image-20230313115533956

image-20230313115613027

注意: Arthas热更新目前不支持在类增加/删除属性field或方法method操作。