背景:本次案例使用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)
在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐