Arthas使用-wath与tt入门
介绍
Arthas 是Alibaba开源的Java诊断工具,可以用于线上快速定位问题。
对于我呢,常常直接用来还原事故现场。比如,异常发生时,又没有记录足够的日志。使用watch与TT排查
下载
maven仓库
Github Releases页
启动
java -jar arthas-boot.jar
启动后选择要观察的java进程。
选择应用java进程:
$ $ java -jar arthas-boot.jar
*> [1]: 35542
[2]: 71560 arthas-demo.jar
Demo进程是第2个,则输入2,再输入回车/enter。Arthas会attach到目标进程上,
watch
使用watch 可以查看方法调用时的入参(params)、返回(returnObj)、异常(throwExp)
如官网用例:
通过watch命令来查看demo.MathGame#primeFactors函数的返回值:
$ watch demo.MathGame primeFactors returnObj
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 107 ms.
ts=2018-11-28 19:22:30; [cost=1.715367ms] result=null
ts=2018-11-28 19:22:31; [cost=0.185203ms] result=null
ts=2018-11-28 19:22:32; [cost=19.012416ms] result=@ArrayList[@Integer[5],@Integer[47],@Integer[2675531],
]
ts=2018-11-28 19:22:33; [cost=0.311395ms] result=@ArrayList[@Integer[2],@Integer[5],@Integer[317],@Integer[503],@Integer[887],
]
常用命令
我经常用下面的参数来排查问题, -x 可以显示属性的深度。
watch 全路径类名 方法名 "{params,returnObj,throwExp}" -x 3
参数说明
watch 的参数比较多,主要是因为它能在 4 个不同的场景观察对象
参数名称 参数说明
class-pattern 类名表达式匹配
method-pattern 方法名表达式匹配
express 观察表达式
condition-express 条件表达式
[b] 在方法调用之前观察
[e] 在方法异常之后观察
[s] 在方法返回之后观察
[f] 在方法结束之后(正常返回和异常返回)观察
[E] 开启正则表达式匹配,默认为通配符匹配
[x:] 指定输出结果的属性遍历深度,默认为 1
特别说明
这里要注意方法入参和方法出参的区别,有可能在中间被修改导致前后不一致,除了 -b 事件点 params 代表方法入参外,其余事件都代表方法出参。即:如果方法中改变了params,则观察到的params可能已经被修改。
tt来回溯方法执行
有watch后,可以很方便线上的Debug。但是经常有以下场景:
- 想获取到任意对象后,执行任意方法
- watch能看到的深度不够
都可以使用tt来解决:
tt可以记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测。
案例一:找到数据库建立连接使用的url
由上图可以看出,我最终打印出了jdbc:mysql://....
找到了我想知道的url。
记录
命令:tt -t 类名 方法名
,此处-t
表示记录执行情况。 后面可以跟通配符来匹配具体的类与执行的方法。
重放
tt -t
后,web程序通过访问页面等方式最终触发到我们观察的方法,最终留下记录。如上图的1025这个index。
使用tt -i 1025 -w "target.getUrl()"
打印出了1025这次执行的目标对象(target)的getUrl
的结果。
-i
表示指定哪次记录,-w
表示执行 ognl表达式
ognl表达式支持的参数:
- target 目标对象
- params 入参
- returnObj 出参
- throwExp 异常
- …
案例二:查看更深的属性
可以通过ognl表达式,一直查看到深层次的属性。
案例三:从spring context里获取任意bean
来自:Arthas实践–获取到Spring Context,然后为所欲为
从spring context里获取任意bean
获取到spring context之后,就可以获取到任意的bean了,比如获取到helloWorldService,并调用getHelloMessage()函数:
$ tt -i 1000 -w 'target.getApplicationContext().getBean("helloWorldService").getHelloMessage()'
@String[Hello World]
Affect(row-cnt:1) cost in 5 ms.
说明
可以使用trace帮助追踪方法调用,再使用watch,tt等命令观察。
参考
Arthas实践–获取到Spring Context,然后为所欲为
Docs » 命令列表 » tt
Docs » 快速入门
Arthas使用-wath与tt入门相关推荐
- Arthas 命令解析(watch/tt/sc)
Arthas是Alibaba开源的Java诊断工具,Arthas支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的Tab自动补全功能,进一步方便进行问题的定位 ...
- java诊断工具-Arthas(阿尔赛斯)入门
Arthas是什么? Arthas 是Alibaba开源的Java诊断工具. 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 E ...
- arthas使用示例:tt记录指定方法每次调用的入参和返回值
参数说明 使用举例 字段说明 检索调用记录 查看调用信息 重做一次调用 总结
- HTML +CSS 语法
HTML 1.html基本结构 <!DOCTYPE html> 声明当前的html文档是 html5 <html></html> 根标签(根节点) 一个网页中只有一 ...
- 「技术工具」阿里开源Java在线诊断工具 Arthas 进阶教程
Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 本教程会以一个普通的Spring Boot应用为例,演示Arthas命令的详细用法. Github: https://githu ...
- 阿里巴巴开源的 Java 诊断工具:Arthas(阿尔萨斯)
Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exce ...
- 线上诊断之arthas
上篇文章中我们说到java自带的JVM调优工具,但是自带的工具用户体验不是很好,而且工具间来回切换比较繁琐.这篇我们来说一个阿里提供的体验更好,功能更强大的Java 诊断工具Arthas. artha ...
- Arthas(阿尔萨斯) 能为你做什么?
Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱.当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Excep ...
- Arthas进阶教程
整理自 https://alibaba.github.io/arthas/arthas-tutorials?language=cn&id=arthas-advanced 1.启动demo 下载 ...
最新文章
- 半分钟内能看透问题本质的人是如何思考的?
- 按键精灵-Sub和Function
- 动态slimmable网络:高性能的网络轻量化方法!对比slimmable涨点5.9%
- 支付宝接口参数调用相关
- 从编解码算法到全链路RTC架构,揭秘淘系直播技术演进之路
- JavaScript算法【特殊篇】数组去重的十种实用方案
- 使用Json出现java.lang.NoClassDefFoundError解决方法
- 使用nginx的ngx_upstream_jdomain模块实现k8s容器的负载均衡
- 哈理工OJ 1795 发现王国之旅(最小生成树)
- 全面质量管理 TQM、六西格玛、CMMI、ISO9000 关系
- RoboWare Studio使用的部分问题
- FileUpload1.PostedFile.FileName未找到文件或者上传失败
- 流水过亿的《海盗来了》被指抄袭 微信小游戏为何抄袭事件频出?
- 史上最牛最强的linux学习笔记 4.linux常用命令
- DDD与数据事务脚本
- setPositiveButton,setNegativeButton,setNeutralButton各代表什么意思
- 80核处理器_最受欢迎的处理器 酷睿i5-9400F果然霸榜了
- 这个公式,让你的学习更高效 (L先生说-微信公众号)
- 计算机辅助设计在环境工程中的应用,原创:试论计算机辅助设计在环境工程中的应用原稿...
- 2019国赛C题优秀论文机场的出租车问题
热门文章
- 2014中山大学考研计算机学院复试线及调剂,2014年中山大学信息科学与技术学院考研复试线...
- 10-15 查询未登记成绩的学生(MSSQL)
- 国学经典成就李白 《孟子》之类读本要早读
- el-dialog嵌套问题,第二个弹窗会被遮住的解决办法
- dubbo底层原理解析及安装应用
- 【转】29 岁成为阿里巴巴 P8,工作前 5 年完成晋升 3 连跳,他如何做到?
- php数据库连接教程,php如何连接数据库的方法
- 腾云忆想科技和腾讯关系_科技内循环,机会远大于风险
- Unity3D制作3dRPG游戏——主角移动控制实现
- 数据分析36计(14):A/B测试中的10个陷阱,一不注意就白做