当前位置:首页 > 科技  > 软件

接口响应慢该如何排查

来源: 责编: 时间:2023-10-23 17:05:59 421观看
导读不知道大家有没有遇到这种情况,接口业务逻辑写完后,用 postman 一调,发现接口响应时间好长,不得不对接口进行优化。但是此时接口的代码往往逻辑比较复杂,调用层次也比较多,很难定位到耗时较长的代码块。遇到这种情况大家都

不知道大家有没有遇到这种情况,接口业务逻辑写完后,用 postman 一调,发现接口响应时间好长,不得不对接口进行优化。但是此时接口的代码往往逻辑比较复杂,调用层次也比较多,很难定位到耗时较长的代码块。4jf28资讯网——每日最新资讯28at.com

4jf28资讯网——每日最新资讯28at.com

遇到这种情况大家都是如何定位耗时代码块的呢?4jf28资讯网——每日最新资讯28at.com

我看到很多人都是直接用System.currentTimeMillis()对代码进行埋点:4jf28资讯网——每日最新资讯28at.com

public static void main(String[] args) {    Long startTime = System.currentTimeMillis();    exec();    Long endTime = System.currentTimeMillis();    log.info("exec 方法执行耗时:{}ms", endTime - startTime);}

或者用StopWatch打印方法耗时:4jf28资讯网——每日最新资讯28at.com

public static void main(String[] args) throws InterruptedException {    StopWatch stopWatch = new StopWatch();    stopWatch.start("exec");    exec();    stopWatch.stop();    System.out.println(stopWatch.prettyPrint());}

这两种方法本质上是一样的,都是通过手动在代码块上进行埋点,打印出方法的耗时,该方法不仅费时费力,而且对代码有侵入,修复问题后删掉代码还是一个麻烦事。4jf28资讯网——每日最新资讯28at.com

下面介绍如果通过Arthas定位耗时代码块。4jf28资讯网——每日最新资讯28at.com

Arthas 简介

Arthas是阿里开源的一款 Java 诊断工具,可以在无需重启 JVM 的情况下,实时查看应用 load、内存、gc、线程等状态信息,还能实时查看方法调用入参、出参、方法调用耗时等。4jf28资讯网——每日最新资讯28at.com

Arthas 快速开始

直接下载Arthasjar 包,然后用java -jar命令启动即可:4jf28资讯网——每日最新资讯28at.com

$ curl -O https://arthas.aliyun.com/arthas-boot.jar$ java -jar arthas-boot.jar

Arthas启动的时候,会打印出当前运行的 java 进程:4jf28资讯网——每日最新资讯28at.com

$ java -jar arthas-boot.jar[INFO] JAVA_HOME: /Library/Java/JavaVirtualMachines/jdk1.8.0_351.jdk/Contents/Home/jre[INFO] arthas-boot version: 3.6.9[INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER.* [1]: 12512 com.huangxy.springstudy.SpringStudyApplication  [2]: 12511 org.jetbrains.jps.cmdline.Launcher

然后可以选择我们需要 attach 的 java 进程,这里我们选择 1,然后按回车。Arthas 会 attach 到目标进程上,并输出日志:4jf28资讯网——每日最新资讯28at.com

[INFO] arthas home: /Users/huangxiaoyu/.arthas/lib/3.6.9/arthas[INFO] Try to attach process 12512[INFO] Attach process 12512 success.[INFO] arthas-client connect 127.0.0.1 3658  ,---.  ,------. ,--------.,--.  ,--.  ,---.   ,---. /  O  / |  .--. ''--.  .--'|  '--'  | /  O  / '   .-'|  .-.  ||  '--'.'   |  |   |  .--.  ||  .-.  |`.  `-.|  | |  ||  |/  /    |  |   |  |  |  ||  | |  |.-'    |`--' `--'`--' '--'   `--'   `--'  `--'`--' `--'`-----'wiki       https://arthas.aliyun.com/doctutorials  https://arthas.aliyun.com/doc/arthas-tutorials.htmlversion    3.6.9main_class com.huangxy.springstudy.SpringStudyApplicationpid        12512time       2023-07-25 09:14:22

到这里,Arthas 已经 attach 到我们的目标进程上了,我们尝试使用dashboad命令,查看进程的信息:4jf28资讯网——每日最新资讯28at.com

$ dashboardID   NAME                           GROUP          PRIORITY  STATE     %CPU      DELTA_TIME TIME      INTERRUPT DAEMON36   DestroyJavaVM                  main           5         RUNNABLE  0.0       0.000      0:1.748   false     false-1   C1 CompilerThread3             -              -1        -         0.0       0.000      0:0.761   false     true-1   VM Periodic Task Thread        -              -1        -         0.0       0.000      0:0.237   false     true24   http-nio-8081-exec-1           main           5         WAITING   0.0       0.000      0:0.098   false     true-1   VM Thread                      -              -1        -         0.0       0.000      0:0.071   false     true25   http-nio-8081-exec-2           main           5         WAITING   0.0       0.000      0:0.055   false     true54   arthas-NettyHttpTelnetBootstra system         5         RUNNABLE  0.0       0.000      0:0.054   false     true-1   GC task thread#8 (ParallelGC)  -              -1        -         0.0       0.000      0:0.043   false     true-1   GC task thread#1 (ParallelGC)  -              -1        -         0.0       0.000      0:0.043   false     true-1   GC task thread#7 (ParallelGC)  -              -1        -         0.0       0.000      0:0.042   false     true-1   GC task thread#6 (ParallelGC)  -              -1        -         0.0       0.000      0:0.042   false     true-1   GC task thread#0 (ParallelGC)  -              -1        -         0.0       0.000      0:0.042   false     true-1   GC task thread#9 (ParallelGC)  -              -1        -         0.0       0.000      0:0.042   false     true-1   GC task thread#2 (ParallelGC)  -              -1        -         0.0       0.000      0:0.042   false     true-1   GC task thread#3 (ParallelGC)  -              -1        -         0.0       0.000      0:0.042   false     true-1   GC task thread#5 (ParallelGC)  -              -1        -         0.0       0.000      0:0.042   false     true-1   GC task thread#4 (ParallelGC)  -              -1        -         0.0       0.000      0:0.042   false     trueMemory                    used     total    max     usage    GCheap                      83M      432M     7282M   1.14%    gc.ps_scavenge.count           4ps_eden_space             72M      212M     2688M   2.69%    gc.ps_scavenge.time(ms)        24ps_survivor_space         0K       21504K   21504K  0.00%    gc.ps_marksweep.count          2ps_old_gen                10M      199M     5461M   0.20%    gc.ps_marksweep.time(ms)       61nonheap                   53M      56M      -1      94.71%code_cache                6M       7M       240M    2.87%metaspace                 40M      43M      -1      94.45%compressed_class_space    5M       5M       1024M   0.53%direct                    16K      16K      -       100.01%mapped                    0K       0K       -       0.00%Runtimeos.name                                                      Mac OS Xos.version                                                   13.0.1java.version                                                 1.8.0_351java.home                                                    /Library/Java/JavaVirtualMachines/jdk1.8.0_351.jdk/Contents/                                                             Home/jresystemload.average                                           3.80processors                                                   12

可以看到dashboad命令会展示一个实时的数据面板,列出了我们平时比较关心的数据指标,如内存使用量,gc 状态等。4jf28资讯网——每日最新资讯28at.com

使用 Trace 命令统计方法耗时

trace命令能主动搜索class-pattern/method-pattern对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。4jf28资讯网——每日最新资讯28at.com

比如下面接口:4jf28资讯网——每日最新资讯28at.com

@RestControllerpublic class HelloController {    @GetMapping("/test")    public String test() throws InterruptedException {       one();       two();       return "hello";    }    private void two() throws InterruptedException {        Thread.sleep(20);        three();    }    private void three() throws InterruptedException {        Thread.sleep(1000);    }    private void one() throws InterruptedException {        Thread.sleep(100);    }}

启动Arthas进程,并 attach 到我们的 springboot 项目上,接着使用trace命令跟踪方法的调用情况:4jf28资讯网——每日最新资讯28at.com

$ trace com.huangxy.springstudy.controller.HelloController test

trace方法第一个参数是要 attach 的类的路径,第二个参数是方法名称,接着我们调用一遍接口,就能看到 hello 方法的调用堆栈及其耗时4jf28资讯网——每日最新资讯28at.com

4jf28资讯网——每日最新资讯28at.com

可以看到,这里耗时比较严重的是tow()方法,花了 1029ms,占了 90.73% 的比重。4jf28资讯网——每日最新资讯28at.com

不过需要注意的是,trace 命令只会 trace 匹配到的函数里的子调用,并不会向下 trace 多层,如果需要 trace 多层,可以用正则匹配多个函数,如:4jf28资讯网——每日最新资讯28at.com

$ trace -E com.huangxy.springstudy.controller.HelloController test|two

4jf28资讯网——每日最新资讯28at.com

这下更清晰的定位到,导致耗时过长的方法是three()方法,定位到方法后,针对性的优化耗时代码块即可。4jf28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-14624-0.html接口响应慢该如何排查

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 2023 年 WebAssembly 现状:第四种 Web 语言

下一篇: 软件设计模式之MVC、MVP、MVVM、HMVC、MVA、MVI和VIPER

标签:
  • 热门焦点
  • 轿车从天而降电动车主被撞身亡 超速抢道所致:现场视频让网友吵翻

    近日,上海青浦区法院判决轿车从天而降电动车主被撞身亡案,轿车车主被判有期徒刑一年。案件显示当时男子驾驶轿车在上海某路段行驶,前车忽然转弯提速超车,
  • 不容错过的MSBuild技巧,必备用法详解和实践指南

    一、MSBuild简介MSBuild是一种基于XML的构建引擎,用于在.NET Framework和.NET Core应用程序中自动化构建过程。它是Visual Studio的构建引擎,可在命令行或其他构建工具中使用
  • 企业采用CRM系统的11个好处

    客户关系管理(CRM)软件可以为企业提供很多的好处,从客户保留到提高生产力。  CRM软件用于企业收集客户互动,以改善客户体验和满意度。  CRM软件市场规模如今超过580
  • 得物效率前端微应用推进过程与思考

    一、背景效率工程随着业务的发展,组织规模的扩大,越来越多的企业开始意识到协作效率对于企业团队的重要性,甚至是决定其在某个行业竞争中突围的关键,是企业长久生存的根本。得物
  • 如何使用JavaScript创建一只图像放大镜?

    译者 | 布加迪审校 | 重楼如果您曾经浏览过购物网站,可能遇到过图像放大功能。它可以让您放大图像的特定区域,以便浏览。结合这个小小的重要功能可以大大改善您网站的用户体验
  • 梁柱接棒两年,腾讯音乐闯出新路子

    文丨田静 出品丨牛刀财经(niudaocaijing)7月5日,企鹅FM发布官方公告称由于业务调整,将于9月6日正式停止运营,这意味着腾讯音乐长音频业务走向消亡。腾讯在长音频领域还在摸索。为
  • 阿里大调整

    来源:产品刘有媒体报道称,近期淘宝天猫集团启动了近年来最大的人力制度改革,涉及员工绩效、层级体系等多个核心事项,目前已形成一个初步的“征求意见版”:1、取消P序列
  • 小米汽车电池信息疑似曝光:容量101kWh,支持800V高压快充

    7月14日消息,今日一名博主在社交媒体发布了一张疑似小米汽车电池信息的照片,显示该电池包正是宁德时代麒麟电池,容量为101kWh,电压为726.7V,可以预测小
  • 三翼鸟智能家居亮相电博会,让用户体验更真实

    2021电博会在青岛国际会展中心开幕中,三翼鸟直接把“家”搬到了现场,成为了展会的一大看点。这也是三翼鸟继9月9日发布了行业首个一站式定制智慧家平台后的
Top