arthas使用

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)]

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

参考文献

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值