前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Arthas常用操作命令

Arthas常用操作命令

作者头像
chenchenchen
发布2020-07-01 10:30:34
1.3K0
发布2020-07-01 10:30:34
举报
文章被收录于专栏:chenchenchenchenchenchen

查看方法调用耗时trace

trace 包名+类名 方法名 例:trace com.aspirecn.amall.goods.openapi.service.impl.WelfareGoodsServiceImpl batchQuerySku

查看线上反编译代码jad

​​​​​​​jad 包名+类名 例:jad com.aspirecn.amall.goods.openapi.service.impl.WelfareGoodsServiceImpl

查看函数的参数/返回值/异常信息:watch

1)打印方法耗时大于10ms的入参:watch 包名+类名 方法名 "{params}" '#cost > 10' -x 3

例:watch com.aspirecn.amall.goods.openapi.service.impl.WelfareGoodsServiceImpl batchQuerySku "{params}" '#cost > 10' -x 3

2)查看返回值:watch 包名+类名 方法名 returnObj

例:watch com.aspirecn.amall.goods.openapi.service.impl.WelfareGoodsServiceImpl batchQuerySku returnObj 返回值:

代码语言:javascript
复制

    Affect(class-cnt:1 , method-cnt:1) cost in 209 ms.
 ts=2020-05-18 15:50:47; [cost=27.478658ms] result=@AjaxResult[
    log=@Log4jLogger[org.apache.logging.slf4j.Log4jLogger@49246ef6],
    code=@String[0],
    msg=@String[success],
    data=@HashMap[isEmpty=false;size=1],
 ]
 

3)观察方法调用前和方法返回后

watch 命令定义了4个观察事件点,即 -b 方法调用前,-e 方法异常后,-s 方法返回后,-f 方法结束后,-f 默认打开,当指定观察点被打开后,在相应事件点会对观察表达式进行求值并输出 [b] 在方法调用之前观察 [e] 在方法异常之后观察 [s] 在方法返回之后观察 [f] 在方法结束之后(正常返回和异常返回)观察 [E] 开启正则表达式匹配,默认为通配符匹配 [n] 表示执行次数 [x:]表示遍历深度,可以调整来打印具体的参数和结果内容,默认值是1 target关键字,查看方法运行前后,当前对象中的属性,target.field_name访问当前对象的某个属性 参数-n 2,表示执行两次,第一次输出的是方法调用前的观察表达式的结果,第二次输出的是方法返回后的表达式的结果 "#cost>200"(单位是ms)表示只有当耗时大于200ms时才会输出,过滤掉执行时间小于200ms的调用 ​ 例:watch com.aspirecn.amall.goods.openapi.service.impl.WelfareGoodsServiceImpl batchQuerySku "{params,target,returnObj}" -x 2 -b -s -n 2 ​ 返回值:

代码语言:javascript
复制
ts=2020-05-18 18:36:42; [cost=0.024147ms] result=@ArrayList[
   @Object[][
       @ArrayList[isEmpty=false;size=1],
   ],
   @WelfareGoodsServiceImpl[
       WELFARE_BATCH_LIMIT=@Integer[100],
       WELFARE_LARGE_LIMIT=@Integer[1000],
   ],
   null,
]
ts=2020-05-18 18:36:42; [cost=1.418077040340744E9ms] result=@ArrayList[
   @Object[][
       @ArrayList[isEmpty=false;size=1],
   ],
   @WelfareGoodsServiceImpl[
       WELFARE_BATCH_LIMIT=@Integer[100],
       WELFARE_LARGE_LIMIT=@Integer[1000],
   ],
   @AjaxResult[
       log=@Log4jLogger[org.apache.logging.slf4j.Log4jLogger@49246ef6],
       code=@String[0],
       msg=@String[success],
       data=@HashMap[isEmpty=false;size=1],
   ],
]

​ ​ ​

方法执行数据的时空隧道:tt

​​​​​​​记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测 -t 记录下类 *Test 的 print 方法的每次执行情况。 -n 3 指定你需要记录的次数 返回字段 字段解释 INDEX 时间片段记录编号,每一个编号代表着一次调用,后续tt还有很多命令都是基于此编号指定记录操作,非常重要。 TIMESTAMP 方法执行的本机时间,记录了这个时间片段所发生的本机时间 COST(ms) 方法执行的耗时 IS-RET 方法是否以正常返回的形式结束 IS-EXP 方法是否以抛异常的形式结束 OBJECT 执行对象的hashCode(),注意,曾经有人误认为是对象在JVM中的内存地址,但很遗憾他不是。但他能帮助你简单的标记当前执行方法的类实体 CLASS 执行的类名 METHOD 执行的方法名 ​ 例: tt -t -n 1 com.aspirecn.amall.goods.openapi.service.impl.WelfareGoodsServiceImpl batchQuerySku 返回值: INDEX TIMESTAMP COST(ms) IS-RET IS-EXP OBJECT CLASS METHOD ------------------------------------------------------- 1000 2020-05-18 18:54:55 22.80519 true false 0x6ba08a09 WelfareGoodsServiceImpl batchQuerySku

查看调用信息:tt -i INDEX编号

代码语言:javascript
复制
​
 例:tt -i 1001
 返回值:
 INDEX          1001
 GMT-CREATE     2020-05-18 18:59:56
 COST(ms)       12.75646
 OBJECT         0x6ba08a09
 CLASS          com.aspirecn.amall.goods.openapi.service.impl.WelfareGoodsServiceImpl
 METHOD         batchQuerySku
 IS-RETURN      true
 IS-EXCEPTION   false
 PARAMETERS[0]  @ArrayList[
                    @String[48131552315576321],
                ]
 RETURN-OBJ     @AjaxResult[
                    log=@Log4jLogger[org.apache.logging.slf4j.Log4jLogger@49246ef6],
                    code=@String[0],
                    msg=@String[success],
                    data=@HashMap[isEmpty=false;size=1],
                ]
 

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

代码语言:javascript
复制
监控数据
    
1)dashboard数据
输入dashboard,会实时展示当前tomcat的多线程状态、Jvm各区域、GC情况等信息
​
2)线程监控
输入thread会显示所有线程的状态信息
输入thread -n 3会显示当前最忙的3个线程,可以用来排查线程CPU消耗
输入thread -b 会显示当前处于BLOCKED状态的线程,可以排查线程锁的问题
  
3)jvm监控
jvm 命令会打印出JVM的各种详细信息
    
4)monitor方法执行监控
monitor 间隔时间[-c <value>] [-h] 执行时间[-n <value>] [-E <value>] 包名+类名 方法名。运行后方法需要被调用才会触发显示。
例:monitor -c 5 com.aspirecn.amall.goods.openapi.service.impl.WelfareGoodsServiceImpl batchQuerySku
返回值:
timestamp 时间戳 
class Java类 
method 方法(构造方法、普通方法) 
total 调用次数 
success 成功次数 
fail 失败次数 
rt 平均RT 
fail-rate 失败率 
avg-rt(ms) 平均响应时间(毫秒)
​

退出Arthas

1)退出当前session:exit/quit 2)完全退出Arthas:shutdown

https://github.com/alibaba/arthas/issues/71

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-05-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 查看方法调用耗时trace
  • 查看线上反编译代码jad
  • 查看函数的参数/返回值/异常信息:watch
  • 方法执行数据的时空隧道:tt
  • 查看调用信息:tt -i INDEX编号
  • 输出当前方法被调用的调用路径:stack
  • 退出Arthas
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档