Arthas的安装和基本使用

背景

在开发项目的时候,你经常会遇到下面的场景:

  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  5. 是否有一个全局视角来查看系统的运行状况?
  6. 有什么办法可以监控到 JVM 的实时运行状态?
  7. 怎么快速定位应用的热点,生成火焰图?
  8. 怎样直接从 JVM 内查找某个类的实例?

这时候,我们可以使用 Arthas 来解决上面的问题。
Arthas 的官方文档: Arthas使用说明

安装

因为 Arthas 是一个由 Spring boot 编写的项目,所以进行安装使用时,我们只需要把对应的 jar 包进行下载,然后使用 java -jar 就可以把项目跑起来

curl -O https://arthas.aliyun.com/arthas-boot.jar

执行上面的 jar 包时,我们必须先运行一个 java 进程在内存中,不然会出现找不到 java 进程的错误 【!!#ff0000 可以使用 jps 查看系统运行的进程!!】

java -jar arthas-boot.jar

简单使用

1. thread

通过 thread 命令查看当前 JVM 的线程堆栈信息
Arthas的安装和基本使用_第1张图片
需要使用加参数的命令,在后面拼接即可

参数名称 参数说明
数字 线程id
[n:] 之地昂最忙的前N个线程并打印堆栈
[b] 找到当前阻塞其他线程的线程
[i] 指定cpu 占比统计的采样间隔,单位为毫秒
thred -n 3
thread -b 

Arthas的安装和基本使用_第2张图片

2. jad

我们想知道线上的分支是否有自己的代码时,我们可以通过 jad 命令进行反编译

jad 类全路径名

Arthas的安装和基本使用_第3张图片

3. monitor

作用: 监控指定类中方法执行情况
对匹配 class-pattern / method-pattern 的类, 反复噶调用进行监控
monitor 命令是一个非实时返回命令,是不断等待目标 java 进程返回信息,直到用户输入 Ctrl + C 为止

monitor 类全路径名 方法名  -n 监控次数 --cycle 间隔采样的时间[单位s]

Arthas的安装和基本使用_第4张图片

4. watch

观察指定方法的调用情况
方法执行数据规则,让你能方便观察到指定方法的调用情况
能观察到的范围为:返回值,抛出异常,入参,通过编写 ONGL 表达式进行变量的查看

watch 类名 方法名 '{params,returnObj,throwExp}'  -n 5  -x 3

这里的 ‘{params,returnObj,throwExp}’ 就是所谓的ognl 表达式的一种,它表示需要输出参数,返回值,抛出异常

Arthas的安装和基本使用_第5张图片

5. trace

trace 是对方法内部的调用路径进行追踪,并输出方法路径上每个节点的耗时

参数说明

参数名称 参数说明
class-pattern 类名表达式
method-pattern 方法名表达式
condition-express 条件表达式,默认是通配符匹配
[E] 开启正则表达式匹配,默认是通配符匹配
[n:] 设置命令执行次数
#cost 方法执行耗时,单位是毫秒
trace 类名 方法名 调用次数 限制条件

Arthas的安装和基本使用_第6张图片

Arthas Idea 插件的简单介绍

上面大概介绍了 Arthas 的一些通用命令。平时开发的时候,我们完全可以借助一些编译器的插件,而无需手敲命令。
Arthas的安装和基本使用_第7张图片
简单使用
启用插件后,我们就可以负者一些通用命令进行修改
Arthas的安装和基本使用_第8张图片
在这里插入图片描述

你可能感兴趣的:(Arthas,java)