arthas使用

迷南。 2023-05-29 05:21 188阅读 0赞

arthas使用

安装下载

基础命令
  • 启动:安装文件夹下执行

    wget https://alibaba.github.io/arthas/arthas-demo.jar
    java -jar arthas-demo.jar

在这里插入图片描述

  • 查看dashboard:输入dashboard,会展示当前进程信息,按ctrl+c可中断执行

    ID NAME GROUP PRIORITY STATE %CPU TIME INTERRUPTED DAEMON
    552 Timer-for-arthas-dashboard-8cbf395a-b670-4c system 10 RUNNABLE 65 0:0 false true
    176 sentinel-time-tick-thread main 5 TIMED_WAITING 29 52:56 false true
    186 DubboResponseTimeoutScanTimer main 5 TIMED_WAITING 2 3:10 false true
    124 New I/O server boss #1 ([id: 0x1be37c6d, /0 main 5 RUNNABLE 1 0:15 false true
    33 Abandoned connection cleanup thread main 5 TIMED_WAITING 0 0:6 false true
    509 AsyncAppender-Worker-arthas-cache.result.As system 9 WAITING 0 0:0 false true
    120 AsyncResolver-bootstrap-0 main 5 TIMED_WAITING 0 0:0 false true
    237 AsyncResolver-bootstrap-executor-0 main 5 WAITING 0 0:0 false true
    507 Attach Listener system 9 RUNNABLE 0 0:0 false true
    107 ClientHouseKeepingService main 5 TIMED_WAITING 0 0:9 false true
    435 ClientHouseKeepingService main 5 TIMED_WAITING 0 0:7 false true
    29 Curator-ConnectionStateManager-0 main 5 WAITING 0 0:0 false true
    84 Curator-ConnectionStateManager-0 main 5 WAITING 0 0:0 false true
    32 Curator-Framework-0 main 5 WAITING 0 0:0 false true
    87 Curator-Framework-0 main 5 WAITING 0 0:0 false true
    67 Curator-TreeCache-0 main 5 WAITING 0 0:0 false true
    Memory used total max usage GC
    heap 242M 583M 583M 41.52% gc.parnew.count 563
    par_eden_space 161M 245M 245M 65.61% gc.parnew.time(ms) 3692
    par_survivor_space 1M 30M 30M 5.06% gc.concurrentmarksweep.count 3
    cms_old_gen 79M 307M 307M 25.89% gc.concurrentmarksweep.time(ms) 299
    nonheap 179M 183M 744M 24.18%
    code_cache 60M 61M 240M 25.14%
    metaspace 107M 109M 256M 41.92%
    Runtime
    os.name Linux
    os.version 3.10.0-862.9.1.el7.x86_64
    java.version 1.8.0_191
    java.home /usr/java/jdk1.8.0_191/jre
    systemload.average 1.18
    processors 2
    uptime 430681s

  • 通过jad反编译class:

    jad com.zhenai.profile.provider.modules.member.service.impl.AppointmentServiceImpl

进阶命令
class/classloader相关
  • sc-查看jvm已经加载的类信息:Search-Class简写,这个能搜索出所有已经加载到jvm的class,支持参数[d],[E],[f],[x:]

    • -d: 输出当前类的详细信息
    • -e: 开启正则表达式匹配,默认为通配符匹配
    • -f: 输 出当前类的成员变量信息,需要配合-d 一起使用
    • -x : 指定输出静态变量时属性的遍历深度,默认0

    //模糊搜索
    $ sc com.zhenai.profile.provider.modules.member.service.impl.*
    //输出类详细信息
    $ sc -d com.zhenai.profile.provider.modules.member.service.impl.AppointmentServiceImpl
    //输出详细信息基础上加上fields信息
    sc -d -f com.zhenai.profile.provider.modules.member.service.impl.AppointmentServiceImpl

  • sm-Search-Method简写,这个命令能搜索出已经加载的class信息的方法信息。参数如下

    • -d : 展示每个方法详细信息
    • -e : 开启正则默认通配符匹配

    //列出所有方法
    sm com.zhenai.profile.provider.modules.member.service.impl.AppointmentServiceImpl
    //方法详细信息
    sm -d com.zhenai.profile.provider.modules.member.service.impl.AppointmentServiceImpl

  • jad- 将jvm中实际运行的class的byte code反编译成java代码。

    //反编译类
    jad com.zhenai.profile.provider.modules.member.service.impl.AppointmentServiceImpl
    //反编译指定函数
    jad com.zhenai.profile.provider.modules.member.service.impl.AppointmentServiceImpl getAddress

  • mc-Memory Compiler内存编译器,编译.java文件生成class文件

    mc /temp/test.java

  • monitor-方法执行监控,非实时返回命令,监控纬度如下:

    • timeStamp-时间戳
    • class-java类
    • method-方法
    • total-调用次数
    • success-成功次数
    • fail-失败次数
    • rt-评价rt
    • fail-tate - 失败率

    //监控getAddress方法,参数-c 统计周期,默认120秒,此处设置5秒
    monitor -c 5 com.zhenai.profile.provider.modules.member.service.impl.AppointmentServiceImpl getAddress

  • watch- 方法执行数据观测,参数如下

    • -b: 方法调用之前观察
    • -e: 方法异常后观察
    • -s : 方法返回后观察
    • -f : 方法结束后(正常,异常返回)观察
    • -E: 开启正则
    • x: 指定输出结果的属性遍历深度
    • 这里重点要说明的是观察表达式,观察表达式的构成主要由 ognl 表达式组成,所以你可以这样写"{params,returnObj}",只要是一个合法的 ognl 表达式,都能被正常支持。

    //基础用法
    watch com.zhenai.profile.provider.modules.member.service.impl.AppointmentServiceImpl getAddress “{params, returnObj}” -x 2
    //观察入参,会发现对比上一个返回值是null
    watch com.zhenai.profile.provider.modules.member.service.impl.AppointmentServiceImpl getAddress “{params, returnObj}” -x 2 -b
    //同时观察方法调用前后, 参数里-n 2,表示只执行两次, 此处第一次输出是方法调用前的观察表达式的结果,第二次输出的是方法返回后的表达式的结果
    watch com.zhenai.profile.provider.modules.member.service.impl.AppointmentServiceImpl getAddress “{params, returnObj}” -x 2 -b -s -n 2
    //跳转-x值观察具体方法参数, -x表遍历深度,可以调整来打印具体的参数和结果内容
    watch com.zhenai.profile.provider.modules.member.service.impl.AppointmentServiceImpl getAddress “{params, target}” -x 2
    //筛选条件对参数筛选
    watch com.zhenai.profile.provider.modules.member.service.impl.AppointmentServiceImpl getAddress “{params[0],target}” “params[0]>0”
    //异常情况抛出
    watch com.zhenai.profile.provider.modules.member.service.impl.AppointmentServiceImpl getAddress “{params[0],thromExp}” -e -x 2
    //耗时过滤
    watch com.zhenai.profile.provider.modules.member.service.impl.AppointmentServiceImpl getAddress ‘{params, target}’ ‘#cost>10’ -x 2

  • trace- 方法内部调用路径,并输出方法路径上的每一个节点耗时,参数:

    • [E] : 正则匹配
    • [n:] : 命令执行次数
    • ”#cost“ : 方法执行耗时

    //同时监控多个方法, -j 表示过滤JDK函数
    trace -E com.zhenai.profile.provider.modules.member.service.impl.AppointmentServiceImpl getAddress|getExpect
    //耗时筛选,此处1 指方法中某个步骤超过1毫秒,并非总执行时间
    trace -E -j com.zhenai.profile.provider.modules.member.service.impl.AppointmentServiceImpl getAddress|getExpect ‘#cost>1’

  • stack- 输出当前方法被调用的调用路径

    //参数 -n表示执行次数,表示下两个请求将被监控, params[0]>0 参数过滤
    stack com.zhenai.profile.provider.modules.member.service.impl.AppointmentServiceImpl getAddress ‘params[0]>0’ -n 2
    //耗时筛选
    stack com.zhenai.profile.provider.modules.member.service.impl.AppointmentServiceImpl getAddress ‘#cost>5’

  • tt -方法执行的时空隧道,记录指定方法每次调用入参以及返回值,

    //基本使用 -n参数指定监控次数,不指定无限制,会将jvm内存耗尽
    tt -t com.zhenai.profile.provider.modules.member.service.impl.AppointmentServiceImpl getAddress -n 3

返回如下:

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7CuCKykW-1572862553766)(E:\\learn\\learn笔记\\picture\\tt命令返回.jpg)\]

  1. //筛选指定方法名字调用
  2. tt -s 'method.name=="getAddress"'
  3. //查看指定编号对应详细信息
  4. tt -i 1001
  5. //重做指定编号请求
  6. tt -i 1004 -p

参考文献

发表评论

表情:
评论列表 (有 0 条评论,188人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Arthas 使用详解

    前言 Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法

    相关 Arthas简单使用

    起因是线上环境有个问题,但是方法又没有打印日志这就很头痛了,又不可能直接发个版本上线,查询了相关资料以后,发现Arthas可以简便的达到目的。 arthas的使用方法有很多:

    相关 Arthas使用方法

    1、简介 Arthas 是Alibaba开源的Java诊断工具。安装在系统所在服务器。可以帮助开发人员或者运维人员查找问题,分析性能,bug追踪。 下载路径:[http

    相关 Arthas使用

    启动 在命令行执行(使用和目标进程一致的用户启动,否则可能attach失败): java -jar arthas-boot.jar ![watermark_t