Arthas诊断追踪性能案例
背景:本次案例使用Windows操作系统进行本地环境演示(生产环境Linux同理)
案例:查询接口性能特别慢,通过Arthas追踪诊断链路中哪个步骤导致性能如此之慢
注意:Arthas主要用于生产环境性能追踪诊断
1、什么是Arthas
阿里巴巴开源的Java诊断工具,基本使用场景是定位复现一些生产环境比较难以定位问题。
可以在线排查问题,以及动态追踪Java代码,实时监控JVM状态等等。
2、安装启动
首先去github安装Arthas的相关zip文件,网址:https://github.com/alibaba/arthas/releases
进入到页面后,安装arthas-bin.zip压缩文件:
安装到windows文件夹中,然后进行解压(Linux操作系统同理,通过unzip命令进行解压),解压后通过命令启动arthas-boot.jar文件:java -jar arthas-boot.jar
arthas启动成功后,会抓取正在运行中的Java进程,我们要诊断的进程编号为【1】,就输入1:
出现上述场景,说明Arthas已经侵入到当前的Java进程当中!
3、追踪流程
这里我们通过trace
命令进行性能追踪,三个红框依次是:trace命令、全类名、方法命
监控成功后,我们通过PostMan请求该接口,发现IBdWxLinkAccessMerchantActivityidService的selectAll方法性能特别低:
跟踪到这一步,发现该方法内部性能非常低,我们想要继续追踪更深层次,需要进行多节点动态跟踪,在开启一个cmd窗口,通过telnet 当前服务器ip arthas端口(默认3658)
命令进行进一步跟踪:
在新窗口中,再次使用trace
命令,进一步追踪深层次方法:
监听id在第一个会话中有所展现:
使用PostMan再次请求接口,就可以在第一个会话中展示出来追踪细节:
发现 com.lzkj.cjwx.service.impl.IBdWxLinkAccessMerchantActivityidServiceImpl 的selectData()是性能短板所在,想要进一步追踪,依旧是刚刚的套路:开启新会话,执行telnet
命令,然后trace
追踪,最终发起请求:
根据上图分析,性能慢的原因是在selectData方法中(第52行),使用了Thread.sleep(5000)
更多推荐
所有评论(0)