爱上Java诊断利器之Arthas

发布时间:2019-11-20 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了爱上Java诊断利器之Arthas脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

1. Arthas是什么?

摘自Arthas的Github介绍:

Arthas is a Java Diagnostic tool open sourced by Alibaba.  Arthas allows developers to troubleshoot production issues for Java applications without modifying code or restarting servers. 

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

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

2. 开启Arthas之旅

2.1 安装Arthas

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

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

爱上Java诊断利器之Arthas

尝试下arthas:

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

爱上Java诊断利器之Arthas

  • 方式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 为主。

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

2.2.1 基础命令

爱上Java诊断利器之Arthas

  • 通过 dashboard 命令可以实时查看应用监控数据

爱上Java诊断利器之Arthas

  • 通过 thread 命令查看应用程序中所有线程情况

爱上Java诊断利器之Arthas


其中第一列为线程的ID。

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

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

爱上Java诊断利器之Arthas

  • 当然,因为是命令行交互,也是支持管道流式操作:

爱上Java诊断利器之Arthas

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

    • 通过 sc yourFullClassName

爱上Java诊断利器之Arthas

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

爱上Java诊断利器之Arthas

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

爱上Java诊断利器之Arthas

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

爱上Java诊断利器之Arthas

爱上Java诊断利器之Arthas

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

爱上Java诊断利器之Arthas

2.2.2 重头戏命令

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

    爱上Java诊断利器之Arthas

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

    爱上Java诊断利器之Arthas

    爱上Java诊断利器之Arthas

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

    爱上Java诊断利器之Arthas

    爱上Java诊断利器之Arthas

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

    爱上Java诊断利器之Arthas

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

    爱上Java诊断利器之Arthas

    爱上Java诊断利器之Arthas

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

2.2.3 更多操作案例

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

参考资料

脚本宝典总结

以上是脚本宝典为你收集整理的爱上Java诊断利器之Arthas全部内容,希望文章能够帮你解决爱上Java诊断利器之Arthas所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: