学无先后,达者为师

网站首页 编程语言 正文

【arthas】使用arthas定位接口耗时问题、无日志情况下排查问题

作者:FindingKeys_wht 更新时间: 2022-07-13 编程语言

接口返回时间过长,一般会看日志来定位耗时步骤,如果没有打日志,或者关键步骤日志打印的不如预期,则不好定位了。
此时可以借助arthas进行定位,其原理就是附加到指定的java进程,对关注的方法进行监听,对实时请求进行分析。

1.使用命令 ps -ef|grep 进程名 查看进程id和用户
在这里插入图片描述

2.启动arthas并附加到进程
启动arthas命令: /opt/****/jdk1.8.0_262/bin/java -jar /opt/arthas/arthas-boot.jar
arthas会将可以附加的进程都列出来,这里我们可以看到进程id 277648是第9个
在这里插入图片描述
输入9后回车,看到下图的输入光标就是附加成功了,arthas此时在等待用户输入监听命令,此例我们介绍trace和watch两个命令,如果附加不成功,优先考虑是否是因为用户不对或其他权限问题
在这里插入图片描述

Arthas命令trace使用

trace命令可以查看某个方法调用其他方法时的耗时。语法:trace 全类名 方法名(可以附带一些参数,具体可以查阅官方文档)
在这里插入图片描述然后就打桩成功,开始监听此方法的调用了,去操作页面进行相关操作,可以看到操作一次,就会打印一次调用栈:
在这里插入图片描述
注意:trace命令只会追踪一层,所以看到耗时较多的方法后,如果还不足以分析出原因,需要调整trace语句为下一层的方法,进一步trace,直到最后分析出根因

Arthas命令watch使用

watch命令可以查看某个方法的入参和返回值。(定位问题却苦于没有打印日志的场景下可以用此方法)
语法:watch 全类名 方法名 参数(具体可以查阅官方文档)
在这里插入图片描述
图例中带了2个参数。解释如下;
1.{params,returnObj} 表示同时打印入参和返回,如果只需要打印返回,那么用returnObj就可以了
2.-x 5 此例中返回的参数是个列表,且对象比较复杂,属性和层次比较多,需要指定打印的深度,这里指定5就是从数组往对象结构里打印5层的意思,设置太小了就看不到对象细节了。

原文链接:https://blog.csdn.net/wht_0217/article/details/125526883

栏目分类
最近更新