• 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
    
    

    在这里插入图片描述

  • 相关阅读:
    jquery 登录-记住密码
    前端面试宝典React篇17 useEffect 与 useLayoutEffect 区别在哪里?
    海外工具站 2022 复盘:50+ 条所见所思所感
    Liquid~
    使用 Learner Lab - 使用 Lambda 转换图片为 base64 格式
    光栅投影三维重建
    【C语言陷阱】00_scanf函数输入含空格时的陷阱
    基于SpringBoot的大学生体质测试管理系统
    html鼠标悬停图片放大
    map和set的具体用法 【C++】
  • 原文地址:https://blog.csdn.net/weixin_44143876/article/details/139955723