接口请求到服务器端响应的时间,接口响应时间剖析
在日常工作过程中,我们经常需要关注接口的响应时间,优化接口的时延,那么接口的响应时间由哪些部分组成呢?先给出一个公式:
接口响应时间 = 请求机器与服务器之间包往返时间 RTT * N + 业务处理处理时间
通过下面的一组实验数据,我们可以完整地解析出从请求接口,到接口返回最后一个字节的数据,所用的时间,下面是测试环境:
请求机器 ip:10.145.67.55
请求机器端口:51830
服务器 ip:10.109.93.26
服务器端口:8703
通过 curl 命令可以获取接口的响应时间:
curl -o /dev/null -s -w "time_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{time_total}\n" 'http://10.109.93.26:8703/xxx'
time_connect: 0.012622
time_starttransfer: 0.028162
time_total: 0.028248
时间指标解释 :
time_connect 建立到服务器的 TCP 连接所用的时间 12.6 ms
time_starttransfer 在发出请求之后,Web 服务器返回数据的第一个字节所用的时间,28.1 ms
time_total 完成请求所用的时间,28.2 ms
首先,可以通过 ping 命令找到获取 RTT (Round-Trip Time):
ping -c 3 10.109.93.26
PING 10.109.93.26 (10.109.93.26) 56(84) bytes of data.
64 bytes from 10.109.93.26: icmp_seq=1 ttl=57 time=10.5 ms
64 bytes from 10.109.93.26: icmp_seq=2 ttl=57 time=10.4 ms
64 bytes from 10.109.93.26: icmp_seq=3 ttl=57 time=10.5 ms
--- 10.109.93.26 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2013ms
rtt min/avg/max/mdev = 10.482/10.517/10.538/0.121 ms
由上可以看出 RTT 为 10.5 ms
通过 tcpdump 命令可以获取请求机器与服务器之间的通信细节:
tcpdump -S -n -i any host 10.109.93.26
19:37:44.217739 IP 10.145.67.55.51830 > 10.109.93.26.8703: Flags [S], seq 2113915355, win 29200, options [mss 1460,sackOK,TS val 1993677883 ecr 0,nop,wscale 8], length 0
19:37:44.230092 IP 10.109.93.26.8703 > 10.145.67.55.51830: Flags [S.], seq 4262241738, ack 2113915356, win 28960, options [mss 1460,sackOK,TS val 1329263607 ecr 3677883,nop,wscale 8], length 0
19:37:44.230132 IP 10.145.67.55.51830 > 10.109.93.26.8703: Flags [.], ack 4262241739, win 115, options [nop,nop,TS val 1993677896 ecr 1329263607], length 0
19:37:44.231506 IP 10.145.67.55.51830 > 10.109.93.26.8703: Flags [P.], seq 2113915356:2113915459, ack 4262241739, win 115, options [nop,nop,TS val 1993677897 ecr 9263607], length 103
19:37:44.243846 IP 10.109.93.26.8703 > 10.145.67.55.51830: Flags [.], ack 2113915459, win 114, options [nop,nop,TS val 1329263621 ecr 1993677897], length 0
19:37:44.245639 IP 10.109.93.26.8703 > 10.145.67.55.51830: Flags [P.], seq 4262241739:4262241916, ack 2113915459, win 114, options [nop,nop,TS val 1329263623 ecr 3677897], length 177
19:37:44.245660 IP 10.145.67.55.51830 > 10.109.93.26.8703: Flags [.], ack 4262241916, win 119, options [nop,nop,TS val 1993677911 ecr 1329263623], length 0
19:37:44.245687 IP 10.109.93.26.8703 > 10.145.67.55.51830: Flags [F.], seq 4262241916, ack 2113915459, win 114, options [nop,nop,TS val 1329263623 ecr 1993677897], length 0
19:37:44.245694 IP 10.145.67.55.51830 > 10.109.93.26.8703: Flags [.], ack 4262241917, win 119, options [nop,nop,TS val 1993677911 ecr 1329263623], length 0
19:37:44.245818 IP 10.145.67.55.51830 > 10.109.93.26.8703: Flags [F.], seq 2113915459, ack 4262241917, win 119, options [nop,nop,TS val 1993677911 ecr 1329263623], length 0
19:37:44.258120 IP 10.109.93.26.8703 > 10.145.67.55.51830: Flags [.], ack 2113915460, win 114, options [nop,nop,TS val 1329263635 ecr 1993677911], length 0
分析:
编号为 1-3 消息为 tcp 的三次握手,耗时 12.3 ms,计入响应时间。
第 4 条消息为请求机器向服务机器发送请求
第 5 条消息为服务器对于消息的确认
第 6 条消息为服务的结果响应,第 5 条与第 6 条消息之间耗时 1.8 ms,为业务处理时间,这里因为仅仅返回固定的文本,无其他复杂逻辑,所以耗时比较短
第 7 条消息为请求机器对服务器响应的消息确认,至此服务器响应结束。
编号 8-11 消息为 tcp 的四次挥手,不计入响应时间。
本次请求响应时间包括,三次握手的一个 RTT(消息 1 - 2,发送最后一个确认的同时开始发送请求体)12.3 ms,服务器处理时间 1.8ms,以及消息返回请求一个RTT (消息 4-6)14.1 ms,总体 28.2 ms 与 curl 命令打印时间相符。
接口请求到服务器端响应的时间,接口响应时间剖析相关推荐
- Vue + webpack 项目配置化、接口请求统一管理
准备工作 需求由来: 当项目越来越大的时候提高项目运行编译速度.压缩代码体积.项目维护.bug修复......等等成为不得不考虑而且不得不做的问题. 又或者后面其他同事接手你的模块,或者改你的bug ...
- 火车到站时间接口 站到站列车信息检索
火车到站时间接口,支持站到站列车信息检索,查询列次.列次类型.出发站.出发站类型.到达站.到达站类型.发车时间.到达时间.历时.里程.价格列表等相关内容. 接口名称:火车到站时间接口 接口平台:开放a ...
- php抓取搜狗图片,搜狗美图 API 接口请求调用
原标题:搜狗美图 API 接口请求调用 搜狗美图 API 接口在网上已经很多且大都封装成了 API 供别人调用.支持前台跨域请求,以POST方式提交图片即可.搜狗美图 API 接口每日都会更新一张美图 ...
- http接口测试:了解协议、请求方法、响应状态码
http接口测试:了解协议.请求方法.响应状态码 接口在各个系统间的重要性无需重申,主要体现在外部系统与系统之间以及内部各子系统之间的交互点.通过这些特定的交互点和一些特殊的规则标准(协议)来进行系统 ...
- (十一)jmeter接口自动化难点系列---设置响应超时时间
在做jmeter接口测试的时候,有时服务器问题,导致我们的接口一直在请求,而无法得到返回. 所以我们需要用到jmeter的一个功能响应超时自动停止请求. 在jmeter中, 有一项设置名称为timeo ...
- Webservice开发之xsd中开发请求数据的响应接口
场景 SpringBoot整合spring-ws开发webservice接口(全流程详细教程)参照: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article ...
- java 请求响应_java http接口请求响应 request response
接口类: 1 package org.sunshine.dcda.epg.wechat.controller.niao; 2 3 import javax.servlet.http.HttpServl ...
- java http打印请求日志_spring打印http接口请求和响应
在程序日志中打印出接口请求和响应的内容是一个基本的技术需求.如果在每个接口中实现请求响应的日志打印,程序编写会很繁琐,我们可以利用spring提供的机制,集中处理接口请求响应的日志打印. 具体的代码参 ...
- RTMP推流协议视频直播点播平台EasyDSS请求时间接口返回的数据打印在前端页面全屏飘红问题解决
TSINGSEE青犀视频团队接到过很多比较大的项目,这类项目的特点是接入数据量多,处理数据量也大,在对服务器造成负荷的同时,也对程序造成了堵塞. 拿EasyDSS视频直播点播平台举例,一旦EasyDS ...
最新文章
- ISA SERVER日志存放SQL SERVER中
- 第八次课作业(采购管理、信息与配置管理)
- 找出n个自然数(1,2,3,…,n)中取r个数的组合(C语言)
- poj1969---找规律
- SpringMVC配置静态资源加载, 中文乱码处理,注解驱动
- 简单又有效!神奇的轻量级通用上采样算子CARAFE
- AntiModerate – 渐进式图片加载的 JavaScript 库
- 统计php 代码行数,PHP实现统计代码行数小工具
- 对称加密算法和非对称加密算法的区别
- 常用Quartz cron表达式例子
- 武汉科技大学计算机实验预约系统,实验室与设备管理处
- 创建个人博客只需五步骤——小白都能看会的详细过程,教你如何白嫖阿里云服务器
- [授权发表]程序执行的那一刹那
- 2020年3月20日阿里内推笔试题
- C++计算带利息存款
- 行为识别笔记:iDT算法用法与代码解析
- [土狗之路]coursera 与 oj上的递归练习作业-- 单词翻转 角谷猜想
- springboot/springcloud整合mybatis(mysql)
- Java 无效的标记_Java--Error:java: 无效的标记: -release
- Python 定时框架 - Apscheduler