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