Arthas安装及基本使用


Arthas 是基于 Greys 进行二次开发的全新在线诊断工具,利用Java6的Instrumentation特性,动态增强你所指定的类,获取你想要到的信息,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,可以方便定位、分析诊断问题。

Arthas安装

官网

下载安装脚本

curl -L https://arthas.aliyun.com/install.sh | sh

启动

./as.sh

输入诊断应用序号,然后回车
在这里插入图片描述

注意:如果出现

Error: telnet is not installed. Try to use java -jar arthas-boot.jar

提示我们的系统没有安装telnet
执行下面命令安装之后再重新执行即可

yum install -y telnet-server.x86_64
yum install -y telnet.x86_64

常用命令

help 
help dashboard

可以查看帮助以及某个帮助的详细信息
在这里插入图片描述

** 返回信息说明**
ID: Java级别的线程ID,注意这个ID不能跟jstack中的nativeID一一对应
NAME: 线程名
GROUP: 线程组名
PRIORITY: 线程优先级, 1~10之间的数字,越大表示优先级越高
STATE: 线程的状态
CPU%: 线程消耗的cpu占比,采样100ms,将所有线程在这100ms内的cpu使用量求和,再算出每个线程的cpu使用占比。
TIME: 线程运行总时间
INTERRUPTE: 线程当前的中断位状态
DAEMON: 是否是daemon线程

dashboard

当前系统的实时数据面板
在这里插入图片描述

thread

查看当前 JVM 的线程堆栈信息

在这里插入图片描述

可用参数
id: 线程id
-n 指定最忙的前N个线程并打印堆栈
b 找出当前阻塞其他线程的线程
-i 指定cpu占比统计的采样间隔,单位为毫秒
注:这里的cpu统计的是,一段采样间隔内,当前JVM里各个线程所占用的cpu时间占总cpu时间的百分比。其计算方法为: 首先进行一次采样,获得所有线程的cpu的使用时间(调用的是java.lang.management.ThreadMXBean#getThreadCpuTime这个接口),然后睡眠一段时间,默认100ms,可以通过-i参数指定,然后再采样一次,最后得出这段时间内各个线程消耗的cpu时间情况,最后算出百分比。注意: 这个统计也会产生一定的开销(JDK这个接口本身开销比较大),因此会看到as的线程占用一定的百分比,为了降低统计自身的开销带来的影响,可以把采样间隔拉长一些,比如5000毫秒
在这里插入图片描述

jvm

查看当前 JVM 的信息,无参数
在这里插入图片描述

sc

查看JVM已加载的类信息
可用参数
class-pattern 类名表达式(必填)
-d 输出当前类的详细信息,包括这个类所加载的原始文件来源、类的声明、加载的ClassLoader等详细信息。如果一个类被多个ClassLoader所加载,则会出现多次
-E 开启正则表达式匹配,默认为通配符匹配
-f 输出当前类的成员变量信息(需要配合参数-d一起使用)
-x 指定输出静态变量时属性的遍历深度,默认为 0,即直接使用 toString 输出

注意:class-pattern支持全限定名,如com.test.AAA,也支持com/test/AAA这样的格式,这样,我们从异常堆栈里面把类名拷贝过来的时候,不需要在手动把/替换为
注意:sc 默认开启了子类匹配功能,也就是说所有当前类的子类也会被搜索出来,想要精确的匹配,请打开options disable-sub-class true开关

在这里插入图片描述

sm

查看已加载类的方法信息

可用参数
class-pattern 类名表达式(必填)
method-pattern 方法名表达式匹配
-d 输出当前类的详细信息,包括这个类所加载的原始文件来源、类的声明、加载的ClassLoader等详细信息。如果一个类被多个ClassLoader所加载,则会出现多次
-E 开启正则表达式匹配,默认为通配符匹配

在这里插入图片描述

jad

反编译指定已加载类的源码

classloader

查看classloader的继承树,urls,类加载信息,使用classloader去getResource

monitor

方法执行监控
monitor 命令是一个非实时返回命令,实时返回命令是输入之后立即返回,而非实时返回的命令,则是不断的等待目标 Java 进程返回信息,直到用户输入 Ctrl+C 为止。服务端是以任务的形式在后台跑任务,植入的代码随着任务的中止而被不会被执行,所以任务关闭后,不会对原有性能产生太大影响,而且原则上,任何 Arthas 的命令也不会引起任何原有业务逻辑的改变
可用参数
class-pattern 类名表达式(必填)
method-pattern 方法名表达式匹配(必填)
-c 统计周期,默认值为120秒
返回结果
timestamp 时间戳
class java类
method 方法(构造方法、普通方法)
total 调用次数
success 成功次数
fail 失败次数
**rt **平均rt
fail-rate 失败率

monitor -c 5 com.gugu.controller.UserController testUrlPathParam

在这里插入图片描述

watch

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

可用参数
class-pattern 类名表达式(必填)
method-pattern 方法名表达式匹配(必填)
express观察表达式
condition-express条件表达式
-b 在方法调用之前观察(默认关闭)
-e 在方法异常之后观察(默认关闭)
-s 在方法返回之后观察(默认关闭)
-f 在方法结束之后(正常返回和异常返回)观察 (默认开启)
-x 指定输出结果的属性遍历深度,默认为0

注意:观察表达式的构成主要由 groovy 表达式组成,只要是一个合法的 groovy 表达式,都能被正常支持。
观察的维度也比较多,主要体现在参数 advice 的数据结构上。Advice 参数最主要是封装了通知节点的所有信息。

在这里插入图片描述
在这里插入图片描述

trace

方法内部调用路径,并输出方法路径上的每个节点上耗时, trace 命令能主动搜索 class-pattern/method-pattern 对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。
trace 能方便的帮助你定位和发现因 RT 高而导致的性能问题缺陷,但其每次只能跟踪一级方法的调用链路
trace 在执行的过程中本身是会有一定的性能开销,在统计的报告中并未像 JProfiler 一样预先减去其自身的统计开销。所以这统计出来有些许的不准,渲染路径上调用的类、方法越多,性能偏差越大。但还是能让你看清一些事情的。
可用参数
class-pattern 类名表达式(必填)
method-pattern 方法名表达式匹配(必填)
condition-express 条件表达式
-n 命令执行次数
#cost 方法执行耗时

注意:很多时候我们只想看到某个方法的rt大于某个时间之后的trace结果,例如trace *UserController testUrlPathParam '#cost>100’表示当执行时间超过100ms的时候,才会输出trace的结果。

trace com.gugu.controller.UserController testUrlPathParam

在这里插入图片描述

stack

输出当前方法被调用的调用路径, 很多时候我们都知道一个方法被执行,但这个方法被执行的路径非常多,或者你根本就不知道这个方法是从那里被执行了,此时你需要的是 stack 命令。

可用参数
class-pattern 类名表达式(必填)
method-pattern 方法名表达式匹配(必填)
condition-express 条件表达式
-n 命令执行次数

在这里插入图片描述

tt

方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测

reset

重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类

quit

退出当前 Arthas 客户端,其他 Arthas 客户端不受影响

shutdown

关闭 Arthas 服务端,所有 Arthas 客户端全部退出

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值