arthas

一、简介

在这里插入图片描述
Arthas 是一款开源的 Java 诊断工具,由阿里巴巴开源,主要面向在线上应用的实时监控和故障定位。它提供了一系列强大的功能,可以帮助开发者在不重启应用的情况下诊断应用中的问题

文档位置

https://arthas.aliyun.com/doc/

应用场景

Arthas 主要应用于生产环境中的 Java 应用诊断,具体场景包括:

  • 性能瓶颈定位:通过监控和追踪功能,可以识别出方法调用中耗时较长的地方。
  • 内存泄漏诊断:可以分析运行时的内存分布,帮助发现内存泄漏问题。
  • 热部署代码:在线更新代码,快速修复在线上环境中的问题。
  • 查看线程堆栈:当应用出现死锁或者高并发处理不当时,可以实时查看线程的堆栈信息。
  • 查看系统属性和环境变量:有时候需要确认应用运行时的系统属性和环境变量。

二、如何使用 Arthas:

下载安装:

Arthas 可以从其GitHub仓库下载,提供了一个安装脚本,可以很容易地在目标机器上安装。

https://github.com/alibaba/arthas

启动 Arthas:

使用命令行工具,可以启动 Arthas 并附加到目标Java进程。

java -jar arthas-boot.jar

选择进程

在这里插入图片描述

执行命令:

在 Arthas 控制台中,可以输入各种命令来执行诊断和监控操作。

卸载Arthas

因为文件是绿色版本,直接删除安装目录既可

rm -rf ./arthas			#	隐藏目录
rm -rf logs/			#	日志目录

三、核心监视功能

monitor:监控方法的执行情况

监控指定类中方法的执行情况
用来监视一个时间段中指定方法的执行次数,成功次数,失败次数,耗时等这些信息

参数说明

方法拥有一个命名参数 [c:],意思是统计周期(cycle of output),拥有一个整型的参数值

参数名称参数说明
class-pattern类名表达式匹配
method-pattern方法名表达式匹配
[E]开启正则表达式匹配,默认为通配符匹配
[c:]统计周期,默认值为120秒

监控demo.MathGame类中primeFactors方法,并且每5S更新一次状态

monitor demo.MathGame primeFactors -c 5

在这里插入图片描述
监控的维度说明

监控项说明
timestamp时间戳
classJava类
method方法(构造方法、普通方法)
total调用次数
success成功次数
fail失败次数
rt平均耗时
fail-rate失败率

watch:检测函数返回值

方法执行数据观测,让你能方便的观察到指定方法的调用情况。

能观察到的范围为:返回值、抛出异常、入参,通过编写OGNL 表达式进行对应变量的查看。

参数说明

watch 的参数比较多,主要是因为它能在 4 个不同的场景观察对象

参数名称参数说明
class-pattern类名表达式匹配
method-pattern方法名表达式匹配
express观察表达式
condition-express条件表达式
-b在方法调用之前观察before
-e在方法异常之后观察 exception
-s在方法返回之后观察 success
-f在方法结束之后(正常返回和异常返回)观察 finish
-E开启正则表达式匹配,默认为通配符匹配
-x:1\-x 1指定输出结果的属性遍历深度,默认为 1

这里重点要说明的是观察表达式,观察表达式的构成主要由ognl 表达式组成,所以你可以这样写"{params,returnObj}",只要是一个合法的 ognl 表达式,都能被正常支持。

案例:

查看方法执行的返回值

#	查看方法执行的返回值
watch demo.MathGame primeFactors returnObj
#	观察demo.MathGame类中primeFactors方法出参和返回值,结果属性遍历深度为2。
#	params:表示所有参数数组(因为不确定是几个参数)。
#	returnObject:表示返回值
watch demo.MathGame primeFactors "{params,returnObj}" -x 2

在这里插入图片描述

查看执行前参数:

# -b 方法执行前的参数
watch demo.MathGame primeFactors "{params,returnObj}" -x 2 -b

在这里插入图片描述

查看方法中的属性

#	查看方法中的属性
watch demo.MathGame primeFactors "{target}" -x 2 -b

在这里插入图片描述

查看某一属性的值

watch demo.MathGame primeFactors "{target.illegalArgumentCount}" -x 2 -b

在这里插入图片描述

检测方法在执行前-b、执行后-s的入参params、属性target和返回值returnObj

watch demo.MathGame primeFactors "{params,target,returnObj}" -x 2 -b -s -n 2

在这里插入图片描述

输入参数小于0的情况:

watch demo.MathGame primeFactors "{params[0],target}" "params[0]<0"

在这里插入图片描述

trace:根据路径追踪,并记录消耗时间

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

trace 命令能主动搜索 class-pattern/method-pattern
对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。

观察表达式的构成主要由ognl 表达式组成,所以你可以这样写"{params,returnObj}",只要是一个合法的 ognl 表达式,都能被正常支持。

很多时候我们只想看到某个方法的rt大于某个时间之后的trace结果,现在Arthas可以按照方法执行的耗时来进行过滤了,例如trace *StringUtils isBlank '#cost>100’表示当执行时间超过100ms的时候,才会输出trace的结果。

watch/stack/trace这个三个命令都支持#cost耗时条件过滤。

参数说明:

参数名称参数说明
class-pattern类名表达匹配
method-pattern方法名表达式匹配
condition-express条件表达式,使用OGNL表达式
[E]开启正则表达式匹配,默认是通配符匹配
[n:]设置命令执行次数
#cost方法执行耗时,单位是毫秒
参数名称参数说明
class-pattern类名表达式匹配
method-pattern方法名表达式匹配
condition-express条件表达式
#cost过滤条件,只追踪满足的耗时方法

trace函数指定类的指定方法

#	trace函数指定类的指定方法
trace demo.MathGame run

在这里插入图片描述

项目中常用

在这里插入图片描述

trace:查询最耗时应用

#	在浏览器上进行登录操作,检查最耗时的方法
trace *.DispatcherServlet *

在这里插入图片描述

#	可以分步trace,请求最终是被DispatcherServlet#doDispatch()处理了
trace *.FrameworkServlet doService

在这里插入图片描述

  • 35
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值