• 线上诊断神器-arthas基本应用


    Arthas基本应用

    一、Arthas作用

    什么是Arthas呢?

    ​ Arthas 是一款阿里推出的线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。

    那我们为什么要使用Arthas?

    ​ 当我们定位线上bug时,无法定位到具体位置时,我们就可以使用Arthas来查看方法的出入参、方法的调用链路、以及内部方法报错、反编译class文件等等方式来精确定位到问题的位置。

    二、安装Arthas

    windows下载

    windows最新版本安装地址

    安装目录

    Linux下载

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

    启动Arthas客户端

    java -jar arthas-boot.jar
    

    选择对应的监听服务

    三、基本命令

    3.1 dashboard命令

    • ID: Java 级别的线程 ID,注意这个 ID 不能跟 jstack 中的 nativeID 一一对应。
    • NAME: 线程名
    • GROUP: 线程组名
    • PRIORITY: 线程优先级, 1~10 之间的数字,越大表示优先级越高
    • STATE: 线程的状态
    • CPU%: 线程的 cpu 使用率。比如采样间隔 1000ms,某个线程的增量 cpu 时间为 100ms,则 cpu 使用率=100/1000=10%
    • DELTA_TIME: 上次采样之后线程运行增量 CPU 时间,数据格式为
    • TIME: 线程运行总 CPU 时间,数据格式为分:秒
    • INTERRUPTED: 线程当前的中断位状态
    • DAEMON: 是否是 daemon 线程

    3.2 watch命令

    watch [类全路径名] [方法名] [参数列表....]
    

    栗子:

    watch com.sefonsoft.cloud.govern.operation.biz.protal.controller.SearchController searchResource {'params, returnObj'} -x 3

    参数名称 参数说明
    class-pattern 类名表达式匹配
    method-pattern 函数名表达式匹配
    express 观察表达式,默认值:{params, target, returnObj}
    condition-express 条件表达式
    [b] 函数调用之前观察
    [e] 函数异常之后观察
    [s] 函数返回之后观察
    [f] 函数结束之后(正常返回和异常返回)观察
    [E] 开启正则表达式匹配,默认为通配符匹配
    [x:] 指定输出结果的属性遍历深度,默认为 1,最大值是 4

    3.3 tt命令

    watch 虽然很方便和灵活,但需要提前想清楚观察表达式的拼写,这对排查问题而言要求太高,因为很多时候我们并不清楚问题出自于何方,只能靠蛛丝马迹进行猜测。

    这个时候如果能记录下当时方法调用的所有入参和返回值、抛出的异常会对整个问题的思考与判断非常有帮助。

    于是乎,TimeTunnel 命令就诞生了。

    tt -t com.sefonsoft.cloud.govern.operation.biz.protal.controller.SearchController searchResource
    

    tt -i 1000
    

    • 表格字段说明
    表格字段 字段解释
    INDEX 时间片段记录编号,每一个编号代表着一次调用,后续 tt 还有很多命令都是基于此编号指定记录操作,非常重要。
    TIMESTAMP 方法执行的本机时间,记录了这个时间片段所发生的本机时间
    COST(ms) 方法执行的耗时
    IS-RET 方法是否以正常返回的形式结束
    IS-EXP 方法是否以抛异常的形式结束
    OBJECT 执行对象的hashCode(),注意,曾经有人误认为是对象在 JVM 中的内存地址,但很遗憾他不是。但他能帮助你简单的标记当前执行方法的类实体
    CLASS 执行的类名
    METHOD 执行的方法名

    3.4 trace命令

    trace 命令能主动搜索 class-patternmethod-pattern 对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路,也就是对监控的方法和方法内部的调用链路进行耗时统计。

    # 命令格式
    trace [参数] [类全路径名] [方法名]
    trace --skipJDKMethod false com.sefonsoft.cloud.govern.operation.biz.protal.controller.SearchController searchResource
    

    参数说明

    参数名称 参数说明
    class-pattern 类名表达式匹配
    method-pattern 方法名表达式匹配
    condition-express 条件表达式
    [E] 开启正则表达式匹配,默认为通配符匹配
    [n:] 命令执行次数
    #cost 方法执行耗时
    [m ] 指定 Class 最大匹配数量,默认值为 50。长格式为[maxMatch ]

    3.5 jad命令

    jad 命令将 JVM 中实际运行的 class 的 byte code 反编译成 java 代码,便于你理解业务逻辑;

    # 命令格式
    jad [参数] [类全路径名] [方法名]
    jad --source-only com.sefonsoft.cloud.govern.operation.biz.protal.controller.SearchController searchResource
    

    参数说明

    参数名称 参数说明
    class-pattern 类名表达式匹配
    [c:] 类所属 ClassLoader 的 hashcode
    [classLoaderClass:] 指定执行表达式的 ClassLoader 的 class name
    [E] 开启正则表达式匹配,默认为通配符匹配

    参考博客:

    arthas官网


    __EOF__

  • 本文作者: 阿辉ya
  • 本文链接: https://www.cnblogs.com/curryAhui/p/17336897.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    【配置】Redis常用配置详解
    ZooKeeper的分布式锁
    第八章JRT/0197-2020金融数据安全数据安全分级指南解读
    Handler消息机制-Native层
    计算机组成原理 — PCI-E 总线
    你绝对没想到的GPT的底层意义
    使用VSCODE配置GO语言开发环境
    string详解
    免安装免配置环境的免费 ios 调试工具 sib 来啦
    【算法】【递归与动态规划模块】两个字符串的公共最长子序列
  • 原文地址:https://www.cnblogs.com/curryAhui/p/17336897.html