爱上Java诊断利器之Arthas

1. Arthas是什么?

摘自Arthas的Github介绍:java

Arthas is a Java Diagnostic tool open sourced by Alibaba.git

Arthas allows developers to troubleshoot production issues for Java applications without modifying code or restarting servers.程序员

大意为:Arthas是阿里开源的一个Java诊断工具,能够帮助开发人员在不修改代码或重启服务器的状况下快速定位线上问题。github

听起来确实是咱们的程序员的一大福利。好比,咱们就遇到一种状况,Spring Boot应用中有个cron定时任务为天天凌晨1点启动执行,可是测试起来很不方便,总不能每次修改cron时间来让QC测试吧?这样虽然是方便了测试妹子,可是却徒增了咱们开发时间和迭代次数啊!!!那Arthas究竟是否可以知足咱们需求呢?Go on...shell

2. 开启Arthas之旅

2.1 安装Arthas

  • 方式1:下载arthas-boot.jar包的方式
wget https://alibaba.github.io/arthas/arthas-boot.jar
复制代码

此时在你当前所在目录下会有个arthas-boot.jar包。vim

尝试下arthas:bash

# 启动arthas,会进入命令行交互状态
java -jar arthas-boot.jar
 # 查看arthas命令手册
java -jar arthas-boot.jar -h
复制代码

  • 方式2:经过as.sh安装Arthas(强烈推荐
# 该命令会下载 as.sh 到当前目录下
curl -L https://alibaba.github.io/arthas/install.sh | sh
复制代码

尝试下arthas:服务器

# 启动arthas,会进入命令行交互状态
./as.sh
 # 查看arthas命令手册
./as.sh -h
复制代码

2.2 开始使用

下面演示咱们以as.sh为主。app

首先咱们启动arthas,会查看到咱们当前server上部署的应用已经被探测到,当前个人server上只有一个应用程序,只需输入数字1,便可和该应用进行交互:curl

2.2.1 基础命令

  • 经过dashboard命令能够实时查看应用监控数据

  • 经过thread命令查看应用程序中全部线程状况

其中第一列为线程的ID。

  • 经过thread threadId命令查看指定线程状态信息

    • 好比咱们要查看线程ID为506的线程状态信息:

    • 固然,由于是命令行交互,也是支持管道流式操做:

  • 经过watch命令去查看方法的参数、返回值和异常信息

  • 经过sc命令查看类的信息

    • 经过sc yourFullClassName

    • 经过sc -d yourFullClassName*去查看JVM加载的类信息

    • 经过sc *yourClassName*去查看JVM加载的类信息

  • 经过sm命令查看类的方法信息

    • case 1: sm java.math.RoundingMode

    • case 2: sm -d java.math.RoundingMode

    • case 3: sm java.math.RoundingMode <init>

2.2.2 重头戏命令

  • 经过jad yourFullClassName去查看反编译后的完整代码信息

  • 经过jad --source-only yourFullClassName > /tmp/yourClassName.java导出反编译代码到临时目录

  • 经过vim /tmp/yourClassName.java进行编辑修改代码

  • 经过sc -d *yourClassName | grep classLoaderHash获取加载yourClassName的类加载器

  • 经过mc -c classLoaderHash /tmp/yourClassName.java -d /tmp从新用相同类加载器从新编译修改后的类(mc: Memory Compiler)

  • 经过redefine /tmp/yourFullClassName.class从新加载新的被编译的类文件

2.2.3 更多操做案例

请参考官方手册,了解更多操做案例和用法。

参考资料

相关文章
相关标签/搜索