来自:juejin.cn/post/6936063402640932878分析API的耗时,就是把API的总耗时分成不同的部分,从而清楚地知道是什么原因造成了高耗时。我们借助不同的工具,在不同的网络环境下进行耗时分析,从而提出相应的优化建议。请求发送慢导致耗时增加;由于DNS解析缓慢导致耗时增加;网络环境差导致耗时增加;一直排队反应慢;服务器响应慢导致耗时增加;增加时间消耗;etc...一般来说,API接口响应慢,大部分人会直接归咎于服务器处理慢,这其实是不合理的。通过对比内网环境下的API耗时分析和外网环境下的API耗时分析,大致就会明白原因。通过浏览器的开发者工具分析开发者工具,重点关注指标Waiting(TTFB),TTFB代表第一个字节到达的时间。该时间包括一个往返延迟和服务器准备响应所花费的时间。可以近似为服务端的耗时。如果网络不好或者响应数据量过大,ContentDownload的时间会比较长。这时,你应该考虑压缩响应。Timing开发者工具中的Network显示的是当前页面调用的网络资源。点击资源查看资源。Details,其中Timing是调用资源时的耗时情况。排队。[排队]浏览器在以下情况下将请求排队:有更高优先级的请求。已为此源打开六个TCP连接,这是限制。仅适用于HTTP/1.0和HTTP/1.1。浏览器正在磁盘缓存中临时分配空间。停滞不前。[Stall]请求可能因排队中描述的任何原因而停止。代理协商。[代理协商]浏览器正在与代理服务器协商请求进行协商。已发送请求。【发送请求】正在发送请求。等待(TTFB)。【Waiting】浏览器正在等待响应的第一个字节。TTFB代表第一个字节的时间。此时间包括往返延迟和服务器准备响应所需的时间。内容下载。[响应内容下载]浏览器正在接收响应。其他可能的DNS查找。[DNS]浏览器正在解析请求的IP地址。初始连接。[初始化连接]浏览器正在建立连接,包括TCP握手/重试和协商SSL。通过httpstat工具分析httpstatgit地址:https://github.com/reorx/http...如果是在linux服务器调用上执行,可以使用httpstat。安装直接下载脚本wgethttps://raw.githubusercontent.com/reorx/httpstat/master/httpstat.py通过pippipinstallhttpstatMacbrewinstallhttpstat使用httpstat使用cURL的参数。httpstatwww.baidu.comhttpstat127.0.0.1/post-XPOST--data-urlencode"id=1"-vServer处理,大致可以认为是服务端比较耗时。服务器哪里慢了?打印耗时日志?StopWatchstopWatch=newStopWatch();stopWatch.start();//...stopWatch.stop();LOGGER.info("[某业务]-[时间:{}ms]",stopWatch.getLastTaskTimeMillis());脑子一热就会用的方法,简单直接,但是如果定位不准,可能要加很多这样的日志。让我们用火焰图来可视化软件的执行过程,它是性能分析和调试的利器。生成火焰图的工具有很多,比如AsyncProfiler和linux-perl。方便的。IntelliJIDEA中的火焰图打开火焰图。如果火焰图没有开启,点击+号添加。选择分析火焰图的程序您可以选择一个正在运行的java程序来分析并输出火焰图。直接使用AsyncProfiler分析更简单。async-profilergit地址[1]直接从git安装下载。解压后可用。易于使用来执行命令。./profiler.sh-d10-f/tmp/flamegraph.svg
