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

瑞星  金牌会员 | 2023-4-20 15:23:21 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 892|帖子 892|积分 2676

Arthas基本应用

一、Arthas作用

什么是Arthas呢?
​        Arthas 是一款阿里推出的线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。
那我们为什么要使用Arthas?
​        当我们定位线上bug时,无法定位到具体位置时,我们就可以使用Arthas来查看方法的出入参、方法的调用链路、以及内部方法报错、反编译class文件等等方式来精确定位到问题的位置。
二、安装Arthas

windows下载
windows最新版本安装地址
安装目录

Linux下载
  1. curl -O https://arthas.aliyun.com/arthas-boot.jar
复制代码
启动Arthas客户端
  1. 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命令
  1. 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条件表达式函数调用之前观察[e]在函数异常之后观察函数返回之后观察[f]在函数结束之后(正常返回和异常返回)观察[E]开启正则表达式匹配,默认为通配符匹配[x:]指定输出结果的属性遍历深度,默认为 1,最大值是 43.3 tt命令

watch 虽然很方便和灵活,但需要提前想清楚观察表达式的拼写,这对排查问题而言要求太高,因为很多时候我们并不清楚问题出自于何方,只能靠蛛丝马迹进行猜测。
这个时候如果能记录下当时方法调用的所有入参和返回值、抛出的异常会对整个问题的思考与判断非常有帮助。
于是乎,TimeTunnel 命令就诞生了。
  1. tt -t com.sefonsoft.cloud.govern.operation.biz.protal.controller.SearchController searchResource
复制代码
  1. tt -i 1000
复制代码


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

trace 命令能主动搜索 class-pattern/method-pattern 对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路,也就是对监控的方法和方法内部的调用链路进行耗时统计。
  1. # 命令格式
  2. trace [参数] [类全路径名] [方法名]
  3. 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 代码,便于你理解业务逻辑;
  1. # 命令格式
  2. jad [参数] [类全路径名] [方法名]
  3. jad --source-only com.sefonsoft.cloud.govern.operation.biz.protal.controller.SearchController searchResource
复制代码
参数说明
参数名称参数说明class-pattern类名表达式匹配[c:]类所属 ClassLoader 的 hashcode[classLoaderClass:]指定执行表达式的 ClassLoader 的 class name[E]开启正则表达式匹配,默认为通配符匹配
参考博客:
arthas官网

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

瑞星

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表