摘自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
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
复制代码
# 该命令会下载 as.sh 到当前目录下
curl -L https://alibaba.github.io/arthas/install.sh | sh
复制代码
尝试下arthas:服务器
# 启动arthas,会进入命令行交互状态
./as.sh
# 查看arthas命令手册
./as.sh -h
复制代码
下面演示咱们以as.sh
为主。app
首先咱们启动arthas,会查看到咱们当前server上部署的应用已经被探测到,当前个人server上只有一个应用程序,只需输入数字1,便可和该应用进行交互:curl
dashboard
命令能够实时查看应用监控数据thread
命令查看应用程序中全部线程状况经过thread threadId
命令查看指定线程状态信息
经过watch
命令去查看方法的参数、返回值和异常信息
经过sc
命令查看类的信息
sc yourFullClassName
sc -d yourFullClassName*
去查看JVM加载的类信息sc *yourClassName*
去查看JVM加载的类信息经过sm
命令查看类的方法信息
sm java.math.RoundingMode
sm -d java.math.RoundingMode
sm java.math.RoundingMode <init>
经过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
从新加载新的被编译的类文件