一般从感官上觉得API接口响应慢,大部分人会直接归结于服务端处理慢,前端其实是抱怨不合理的。通过在内网环境下的应慢API耗时分析和外网环境下的API耗时分析的对比,一般会认识到原因所在。怎么办 开发者工具 重点关注指标Waiting (TTFB),TTFB代表第一个字节到达的抱怨时间。此时间包括一次往返延迟和服务器准备响应所花费的应慢时间。可以近似的怎么办认为是服务端耗时。 如果网络情况不好或者响应数据过大,前端则Content Download耗时会长一些,抱怨这时候应该考虑压缩响应. 开发者工具中Network中显示了当前页中调用的应慢网络资源,点击资源可以查看资源的怎么办详情,其中Timing是前端资源调用时的耗时情况。 DNS Lookup. 【DNS】浏览器正在解析请求的IP地址. Initial connection. 【初始化连接】浏览器正在建立连接,包括TCP握手/重试和协商SSL. 通过httpstat工具分析 httpstat git地址: https://github.com/reorx/httpstat 如果是在Linux服务器上进行调用,则可以使用httpstat。 httpstat可以使用cURL的参数。 通过httpstat工具分析 Server Processing可以近似的认为是服务端耗时。 StopWatch stopWatch = new StopWatch(); stopWatch.start(); // ... stopWatch.stop(); 脑子瞬间一热就会使用的方法,简单直接,但是如果定位不准确,你可能要加很多这种日志。 让软件执行情况可视化,是性能分析、调试的利器 火焰图的生成工具很多,比如Async Profiler、linux-perl,网上也有很多关于这方面的介绍,高防服务器IDEA也集成Async Profiler,这个很方便。 打开火焰图 如果没有开启,则点击+号,进行添加。 打开火焰图 选择程序进行火焰图的分析 可以选择一个已经运行中的java程序进行分析,输出火焰图。 选择程序进行火焰图的分析 直接使用Async Profiler更简单 async-profiler git地址[1] 安装 从git上直接下载。 解压下可用。 简单使用 执行命令。 ./profiler.sh -d 10 -f /tmp/flamegraph.svg 可以通过-e来指定cpu、alloc、lock、wall、itimer、ClassName.methodName。 bash 在浏览器中打开file:///tmp/flamegraph.svg,并找到调用的API,我这里调用的是ProjectManageController中的findProject方法。 火焰图 根据长度可以看出该方法中调用方法的耗时情况,这样我们就知道耗时主要集中在什么地方。 PS:如果方法名被编译掉了,那么可以在java启动时加入-XX:+PreserveFramePointer 用户体验的优化是一个长期而艰巨的过程,为了衡量我们网站的性能是否良好,我们有更多的工作需要去做。通常,会在底层自定义一些以用户为中心的指标,比如Server-Timing[2]。通过浏览器的前端开发者工具分析
Timing
其他可能出现的
安装
直接下载脚本wget https://raw.githubusercontent.com/reorx/httpstat/master/httpstat.py通过pippip install httpstatMacbrew install httpstat使用
服务端到底慢在哪里?
打印耗时日志?
还是用火焰图吧
做更多的工作