在日常工作过程中,我们经常需要关注接口的响应时间,优化接口的时延,那么接口的响应时间由哪些部分组成呢?先给出一个公式:

接口响应时间 = 请求机器与服务器之间包往返时间 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 命令打印时间相符。

接口请求到服务器端响应的时间,接口响应时间剖析相关推荐

  1. Vue + webpack 项目配置化、接口请求统一管理

    准备工作 需求由来: 当项目越来越大的时候提高项目运行编译速度.压缩代码体积.项目维护.bug修复......等等成为不得不考虑而且不得不做的问题.  又或者后面其他同事接手你的模块,或者改你的bug ...

  2. 火车到站时间接口 站到站列车信息检索

    火车到站时间接口,支持站到站列车信息检索,查询列次.列次类型.出发站.出发站类型.到达站.到达站类型.发车时间.到达时间.历时.里程.价格列表等相关内容. 接口名称:火车到站时间接口 接口平台:开放a ...

  3. php抓取搜狗图片,搜狗美图 API 接口请求调用

    原标题:搜狗美图 API 接口请求调用 搜狗美图 API 接口在网上已经很多且大都封装成了 API 供别人调用.支持前台跨域请求,以POST方式提交图片即可.搜狗美图 API 接口每日都会更新一张美图 ...

  4. http接口测试:了解协议、请求方法、响应状态码

    http接口测试:了解协议.请求方法.响应状态码 接口在各个系统间的重要性无需重申,主要体现在外部系统与系统之间以及内部各子系统之间的交互点.通过这些特定的交互点和一些特殊的规则标准(协议)来进行系统 ...

  5. (十一)jmeter接口自动化难点系列---设置响应超时时间

    在做jmeter接口测试的时候,有时服务器问题,导致我们的接口一直在请求,而无法得到返回. 所以我们需要用到jmeter的一个功能响应超时自动停止请求. 在jmeter中, 有一项设置名称为timeo ...

  6. Webservice开发之xsd中开发请求数据的响应接口

    场景 SpringBoot整合spring-ws开发webservice接口(全流程详细教程)参照: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article ...

  7. java 请求响应_java http接口请求响应 request response

    接口类: 1 package org.sunshine.dcda.epg.wechat.controller.niao; 2 3 import javax.servlet.http.HttpServl ...

  8. java http打印请求日志_spring打印http接口请求和响应

    在程序日志中打印出接口请求和响应的内容是一个基本的技术需求.如果在每个接口中实现请求响应的日志打印,程序编写会很繁琐,我们可以利用spring提供的机制,集中处理接口请求响应的日志打印. 具体的代码参 ...

  9. RTMP推流协议视频直播点播平台EasyDSS请求时间接口返回的数据打印在前端页面全屏飘红问题解决

    TSINGSEE青犀视频团队接到过很多比较大的项目,这类项目的特点是接入数据量多,处理数据量也大,在对服务器造成负荷的同时,也对程序造成了堵塞. 拿EasyDSS视频直播点播平台举例,一旦EasyDS ...

最新文章

  1. ISA SERVER日志存放SQL SERVER中
  2. 第八次课作业(采购管理、信息与配置管理)
  3. 找出n个自然数(1,2,3,…,n)中取r个数的组合(C语言)
  4. poj1969---找规律
  5. SpringMVC配置静态资源加载, 中文乱码处理,注解驱动
  6. 简单又有效!神奇的轻量级通用上采样算子CARAFE
  7. AntiModerate – 渐进式图片加载的 JavaScript 库
  8. 统计php 代码行数,PHP实现统计代码行数小工具
  9. 对称加密算法和非对称加密算法的区别
  10. 常用Quartz cron表达式例子
  11. 武汉科技大学计算机实验预约系统,实验室与设备管理处
  12. 创建个人博客只需五步骤——小白都能看会的详细过程,教你如何白嫖阿里云服务器
  13. [授权发表]程序执行的那一刹那
  14. 2020年3月20日阿里内推笔试题
  15. C++计算带利息存款
  16. 行为识别笔记:iDT算法用法与代码解析
  17. [土狗之路]coursera 与 oj上的递归练习作业-- 单词翻转 角谷猜想
  18. springboot/springcloud整合mybatis(mysql)
  19. Java 无效的标记_Java--Error:java: 无效的标记: -release
  20. Python 定时框架 - Apscheduler

热门文章

  1. Python学习日记:使用while循环打印九九乘法表和直角三角形
  2. python用ocr技术识别_使用Python和OCR实现图像识别
  3. 企业级开发的JAVA代码生成器-java快速开发平台源码版
  4. 2016终端服务器配置,2016服务器的安装与配置.ppt
  5. 【DSP】TMS320F28335的ADC模块
  6. 用HTML+CSS编写一个计科院网站首页的静态网页
  7. 导出数据到Excel
  8. GeekPro 2022安装 win10+ubuntu20.04.4双系统
  9. IDE 不是程序员的唯一选择
  10. 扫雷小游戏(c语言)