基础编程学习快乐每一天
首页
留言
Siddim.com
当前位置:
首页
>
编程知识库
>
后端开发知识
>
面试官:线上服务平均响应时间太长,怎么排查?
面试官:线上服务平均响应时间太长,怎么排查?
阅读
1
2020-10-10
:
001
期~
180
期汇总,方便阅读(增加设计模式)
前言:
最近线上环境某个接口服务响应时间偏长,导致用户体验超差,那平时该怎么快速的排查这类问题呢?
①、为代码添加上详细的打印日志;不建议 ,一是线上环境,没法随便的重新部署更换了详细日志的代码,二是 添加详细的日志输出,那就意味这会生成大量的日志文件,这些日志文件会占据大量服务器磁盘空间。
②、搭建一个模拟了线上环境的测试环境进行复盘排查;额,出现了这种问题哪有那么多的时间让你进行环境复盘排查,所以此方案也是 不建议的 。
③、线上诊断神器
Arthas
,这个工具是阿里开源的,专门用于线上环境问题排查的,这个工具提供了很多的 命令 用来排查问题;当出现上面的响应时间偏长的问题,就可以使用
Arthas
提供的
trace
命令进行排查,使用这个工具的
trace
命令可以统计到方法中整个调用链路上的所有性能开销和追踪调用链路,查找其中耗时比较长的方法再具体排查即可。
文章接下来将从两方面展开:
①、搭建模拟线上服务接口响应时间偏长的环境;
SpringBoot
服务接口
JMeter
模拟服务接口调用;
②、使用诊断神器
Arthas
提供的命令
trace
命令进行响应时间偏长的问题排查;
模拟线上环境:
1
、
SpringBoot
项目搭建,并且编写好服务接口;
注意:服务接口代码为了简便,只写了 一些大循环的代码 来模拟较长的耗时;除此之外,实际上还包含很多多其它常见的情况,例如:
①、服务接口方法中存在很多的
JDBC
操作 ,并且由于数据库中数据量太大,导致很多的
JDBC
查询非常耗时,并且此时可能由于还没有创建合适的索引,导致查询耗时更加的长,最终导致服务接口响应时间偏长;
②、此服务接口中调用了 其它的服务接口 ,由于内部调用的其它服务接口出现问题等,导致此其它服务接口执行耗时比较长,进而导致服务接口响应时间偏长;
服务接口代码如下:
test1
、
test2
方法如下:
2
、
JMeter
模拟用户调用的测试脚本配置:
3
、服务接口
SpringBoot
代码 和
JMeter
测试脚本的所在项目位置:
服务接口代码准备好后,使用
IDEA
开发工具将其导出为
Jar
包 。
服务接口代码和
JMeter
脚本获取地址:
https
://
github
.
com
/
leishen6
/
springboot
_
arthas
为了模拟最为真实的线上环境,需将准备好的 服务接口
Jar
包放到 服务器中,然后使用命令 *
java
-
jar
.
jar
运行起
Jar
包;然后使用
JMeter
进行接口的调用,在 聚合报告 中发现平均响应时间偏长;如图:
如果有用户反映某功能响应时间太长了,别着急,根据下面的方法进行排查,绝对方便又快速的找到问题原因。往期汇总:
001
期~
150
期汇总
Arthas 问题排查:
1
、首先需要下载阿里开源的
Arthas
的诊断工具
Jar
包,下载地址:
https
://
arthas
.
aliyun
.
com
/
arthas
-
boot
.
jar
;然后将
Jar
包放到 部署服务接口项目的服务器中 。
2
、然后使用
ps
命令,查询出当前运行服务接口的程序进程号;例如:本文章模拟的服务接口程序
Jar
包名称为
springboot
_
arthas
-
1
.
0
.
0
.
jar
,所以命令为:
ps
-
ef
|
grep
springboot
_
arthas
-
1
.
0
.
0
。
3
、然后运行
Arthas
诊断工具,命令:
java
-
jar
arthas
-
boot
.
jar
;开始运行的界面如图:
此时诊断工具还没有运行完,需要手动选择要诊断/监控的
java
进程,并且此工具也会列出全部的
java
进程号,你只需要输入 它们最前的序号 [
1
] 即可;如图:
4
、运行完后,可以使用
trace
命令 监控服务接口方法中调用的其它方法的耗时;
trace
命令能主动搜索
class
-
pattern
/
method
-
pattern
对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。
具体命令格式:
trace
[全限定类名][类中的方法名]
例如:监控本服务接口;
com
.
lyl
.
controller
.
TestController
: 全限定类名,
process
:
TestController
类中的方法;
具体命令:
trace
com
.
lyl
.
controller
.
TestController
process
5
、
trace
命令执行结果展示,如图:
通过
trace
命令监控统计的调用链路各个方法的执行耗时,可以发现调用的
com
.
lyl
.
util
.
StringUtil
类中的
test2
() 方法执行耗时比较大;所以需要特别去查看这个方法的代码是否存在问题;如果这个代码中还存在许多的方法调用链路,则需要再次使用
trace
命令进行监控调用链路的耗时,找出具体可能存在问题的方法。
Arthas
阿里开源的诊断工具还提供了很多的命令供使用,大家可以去查看学习,地址:
https
://
arthas
.
aliyun
.
com
/
doc
/
commands
.
html
。
注意:
①、使用
Arthas
诊断的程序代码,在打包时 不能混淆 ,否则在使用
trace
命令会报 类或方法找不到 ;
②、在使用
trace
命令监控统计时,需要
JMeter
测试脚本正在运行调用服务接口,如果没有调用,则统计不到内部调用链路的耗时情况;
来源:
https
://
juejin
.
im
/
post
/
6880479570894520333
? ~
以上数据来源于网络,如有侵权,请联系删除。
上一篇:
SpringCloud常见面试题(2020最新版)
下一篇:
设计模式是什么鬼(模板方法)
评论
(0)
提交
类别
基础编程学习
HTML
PHP
Python
编程知识库
后端开发知识
热门文章
Java并发中的同步容器与并发容器,你了解多少?
Innodb中的事务隔离级别和锁的关系,难倒一半面试者!
SpringBoot + minio实现分片上传、秒传、续传
面试官:你知道消息队列如何保证数据不丢失吗?
JAVA知识 Java8新特性
面试官:谈谈为什么要限流,有哪些限流方案?
说说动态代理与静态代理区别
面试官:思考Tomcat 类加载器为什么要违背双亲委派模型?
boot-admin 基于SpringBoot的后台权限管理系统,可作为脚手架,用于快速搭建项目
SpringBoot+Vue+App+硬件实现智能家居系统项目