介绍

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。但是经常有以下场景:

  1. 想获取到任意对象后,执行任意方法
  2. 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入门相关推荐

  1. Arthas 命令解析(watch/tt/sc)

    Arthas是Alibaba开源的Java诊断工具,Arthas支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的Tab自动补全功能,进一步方便进行问题的定位 ...

  2. java诊断工具-Arthas(阿尔赛斯)入门

    Arthas是什么? Arthas 是Alibaba开源的Java诊断工具. 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 E ...

  3. arthas使用示例:tt记录指定方法每次调用的入参和返回值

    参数说明 使用举例 字段说明 检索调用记录 查看调用信息 重做一次调用 总结

  4. HTML +CSS 语法

    HTML 1.html基本结构 <!DOCTYPE html> 声明当前的html文档是 html5 <html></html> 根标签(根节点) 一个网页中只有一 ...

  5. 「技术工具」阿里开源Java在线诊断工具 Arthas 进阶教程

    Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 本教程会以一个普通的Spring Boot应用为例,演示Arthas命令的详细用法. Github: https://githu ...

  6. 阿里巴巴开源的 Java 诊断工具:Arthas(阿尔萨斯)

    Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exce ...

  7. 线上诊断之arthas

    上篇文章中我们说到java自带的JVM调优工具,但是自带的工具用户体验不是很好,而且工具间来回切换比较繁琐.这篇我们来说一个阿里提供的体验更好,功能更强大的Java 诊断工具Arthas. artha ...

  8. Arthas(阿尔萨斯) 能为你做什么?

    Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱.当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Excep ...

  9. Arthas进阶教程

    整理自 https://alibaba.github.io/arthas/arthas-tutorials?language=cn&id=arthas-advanced 1.启动demo 下载 ...

最新文章

  1. 半分钟内能看透问题本质的人是如何思考的?
  2. 按键精灵-Sub和Function
  3. 动态slimmable网络:高性能的网络轻量化方法!对比slimmable涨点5.9%
  4. 支付宝接口参数调用相关
  5. 从编解码算法到全链路RTC架构,揭秘淘系直播技术演进之路
  6. JavaScript算法【特殊篇】数组去重的十种实用方案
  7. 使用Json出现java.lang.NoClassDefFoundError解决方法
  8. 使用nginx的ngx_upstream_jdomain模块实现k8s容器的负载均衡
  9. 哈理工OJ 1795 发现王国之旅(最小生成树)
  10. 全面质量管理 TQM、六西格玛、CMMI、ISO9000 关系
  11. RoboWare Studio使用的部分问题
  12. FileUpload1.PostedFile.FileName未找到文件或者上传失败
  13. 流水过亿的《海盗来了》被指抄袭 微信小游戏为何抄袭事件频出?
  14. 史上最牛最强的linux学习笔记 4.linux常用命令
  15. DDD与数据事务脚本
  16. setPositiveButton,setNegativeButton,setNeutralButton各代表什么意思
  17. 80核处理器_最受欢迎的处理器 酷睿i5-9400F果然霸榜了
  18. 这个公式,让你的学习更高效 (L先生说-微信公众号)
  19. 计算机辅助设计在环境工程中的应用,原创:试论计算机辅助设计在环境工程中的应用原稿...
  20. 2019国赛C题优秀论文机场的出租车问题

热门文章

  1. 2014中山大学考研计算机学院复试线及调剂,2014年中山大学信息科学与技术学院考研复试线...
  2. 10-15 查询未登记成绩的学生(MSSQL)
  3. 国学经典成就李白 《孟子》之类读本要早读
  4. el-dialog嵌套问题,第二个弹窗会被遮住的解决办法
  5. dubbo底层原理解析及安装应用
  6. 【转】29 岁成为阿里巴巴 P8,工作前 5 年完成晋升 3 连跳,他如何做到?
  7. php数据库连接教程,php如何连接数据库的方法
  8. 腾云忆想科技和腾讯关系_科技内循环,机会远大于风险
  9. Unity3D制作3dRPG游戏——主角移动控制实现
  10. 数据分析36计(14):A/B测试中的10个陷阱,一不注意就白做