一、概述
1、有个查询接口,响应9s,需要排查下什么问题
2、常规操作是在关键节点的前后获取System.currentTimeMillis(),然后相减
3、其实阿里好用的工具arthas,学用分析
二、安装arthas
1、指导文档
https://arthas.aliyun.com/doc/
2、直接下载
https://arthas.aliyun.com/arthas-boot.jar
3、jdk依赖
1)说是1.7+,现在直接用1.8吧
2)jdk11及以上,没有试,自行尝试
~~
三、运行与使用说明
1、使用说明
1)arthas提供两种方式,一种是按需运行、实时排查;一种是agent代理运行应用jar包
2)agent代理方式,本文不描述;实际场景,用实时排查就行,毕竟不是一直有问题
2、运行arthas
java -jar arthas-boot.jar
1)运行时候,第一次会下载依赖,默认走的是阿里的源,一般没问题
2)运行成功,选择准备分析的项目,就进入到控制台了
~~
四、常用指令
1、命令使用说明
1)文档地址
https://arthas.aliyun.com/doc/commands.html
2)退出的话用指令quit即可
quit
~~
2、dashboard
1)命令
dashboard
2)进入控制台,直接输入即可
3)这个只是了解当前JVM的配置
4)框出来的是什么意思,自行学习吧
~~
3、接口耗时定位
1)首先启动arthas并进入相应项目
2)确定接口所在类-方法,类需要全路径
3)执行命令
trace com.包路径.TestController list
4) 类名TestController,换成自己的
5) 方法名list,换成自己的
6)回车执行,等待收集结果
7) trace是个非实时命令,即会收集多次请求接口
8)看图
9)前面是耗时,后面是方法调用跟踪,真实项目就删掉了
10)分析耗时1: 本来认为只有一个地方耗时,没想到是多个
11)分析耗时2: 对比业务场景,耗时也是合理;第一次接口请求涉及计算,耗时可以正常;第二次耗时,在for遍历,看下代码,的确有优化的空间
12)分析耗时3: 有个统计,实时查了;统计虽然讲实时性,也有优化的方案
13)分析结论
- 第一次请求需要计算的逻辑,不能修改,保留
- 统计查询,增加缓存,即key为查询条件md5,用redis;新增记录时,手动删除缓存
- for耗时,待定
~~