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包。

尝试下arthas:

# 启动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为主。

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

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 更多操作案例

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

参考资料

爱上Java诊断利器之Arthas的更多相关文章

  1. 带你上手阿里开源的 Java 诊断利器:Arthas

    本文适合有 Java 基础知识的人群. 本文作者:HelloGitHub-秦人 HelloGitHub 推出的<讲解开源项目>系列,今天给大家带来一款阿里开源的 Java 诊断利器 Art ...

  2. Java诊断神器:Arthas常用功能

    最新原文:https://www.cnblogs.com/uncleyong/p/14944401.html Arthas是Alibaba开源的Java诊断工具,功能很强大,它是通过Agent方式来连 ...

  3. Java 诊断工具 Arthas 教程学习笔记

    Java 诊断利器 Arthas,是阿里的一款开源工具.Github-alibaba/arthas 上可以看到它的介绍.了解它,主要是最近对分析 Java 错误堆栈比较感兴趣,机缘巧合看到了它. 本文 ...

  4. java 诊断工具——Arthas

    该说不说!小编做的这些功能,最讨厌的就是优化!某些前辈大佬写的代码小辈我实在不敢恭维!那逻辑!那sql! 接下来!今天的主角就登场了,阿里巴巴最近开源出来的一个针对 java 的工具,主要是针对 ja ...

  5. Alibaba Java诊断工具Arthas之快速安装和简单使用

    Alibaba Java诊断工具Arthas简单介绍 : 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 1.这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception ...

  6. Arthas Alibaba 开源 Java 诊断工具

    Arthas 用户文档 English Docs Arthas(阿尔萨斯) 能为你做什么? Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 当你遇到以下类似问题而束手无策时,A ...

  7. Java诊断工具Arthas

    Java诊断工具Arthas 1. Arthas简介 Arthas是阿里开源的一个线上java诊断工具,发现阿里还是挺喜欢开源一些技术的,造福人类.昨天试用了一下,发现真是强大,解决了我工作两年的很多 ...

  8. Java诊断利器Arthas

    1 简介 Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 ...

  9. Java诊断利器Arthas优雅排查生产环境

    前言 Arthas 是Alibaba开源的Java诊断工具.在线排查问题,无需重启:动态跟踪Java代码:实时监控JVM状态.对分秒必争的线上异常,Arthas可帮助我们快速诊断相关问题. 下载安装 ...

随机推荐

  1. 3.JSON使用

    把 JSON 文本转换为 JavaScript 对象 JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 Jav ...

  2. vue-图片预览,查看大图

    [前言] 在 vue 项目中经常碰到图片预览需求,也就是点击小图查看大图.也有一些这样的第三方插件,如 vue-preview 等.但使用起来感觉版本经常变,而且有时 UI 需要在预览页面上加更多的东 ...

  3. 开发-组件-GemBox:百科

    ylbtech-开发-组件-GemBox:百科 6000+ Companies Trust GemBox With .NET and Java File Format Components GemBo ...

  4. MybatisUtil工具类的作用

    1)在静态初始化块中加载mybatis配置文件和StudentMapper.xml文件一次 2)使用ThreadLocal对象让当前线程与SqlSession对象绑定在一起 3)获取当前线程中的Sql ...

  5. spring cloud之Eureka不能注销docker部署的实例

    1 起因 事件的起因是这样的,我们在微服务改造的过程中,选择将服务注册到eureka中,开发的时候还好,使用场景是这样的: 在idea中启动服务,成功注册到eureka,关闭服务,eureka成功注销 ...

  6. HTML <a> 标签的 href 属性_定位资源

    * 定位资源 ** 如果想要定位资源:定义一个位置 <a name="top">顶部</a> ** 回到这个位置 <a href="#top ...

  7. CentOS8 缺少 libglade2 安装包的回避方法

    某些gtk2应用程序需要libglade2安装包,但不知为何CentOS的yum仓库里没有此包, 经测试,可手动安装CentOS7的rpm包安装解决. 更新:使用下面一行即可.sudo yum ins ...

  8. 数据结构与算法-stack

    栈的本质是一种线性表,特殊的一种线性表 基本概念 概念 栈是一种特殊的线性表 栈仅能在线性表的一端进行操作 栈顶(Top):允许操作的一端 栈底(Bottom):不允许操作的一端 stack是一种线性 ...

  9. VUE 1.0

    现代开发模式:vue/react. 20%的时间花在了表现层 传统开发模式:jquery. 80%的时间花在了表现层 MVC——数据.表现.行为分离 视图层(表现层)<----->数据层 ...

  10. [转帖]postgresql 在等待服务器启动时超时

    postgresql 在等待服务器启动时超时 2018年12月24日 :: my_name_nb 阅读数 版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接 ...