1.背景

最近看了阿里巴巴中间件写的一篇文章,讲述了关于并发,RPS,RT之间的关系。感觉收获颇丰。自己使用JMeter工具对公式进行了验证。

2.验证

我们先来看几个基础知识定义:

  1. TPS:每秒完成的事务数。
  2. QPS:每秒发送的请求数(同RPS)。
  3. RT:交易响应时间。
  4. VU虚拟用户数(VU是LR中的叫法,对应JMeter里的线程数)

针对以上术语定义,相信大家早已耳濡目染。唯一需要强调的是TPS(可以包含1到N个请求),本文均以一个请求来进行测试验证。

Little定律公式:并发用户数 = QPS x RT

  • 测试脚本结构图:

说明:JMeter版本5.1.1,采用JMeter自带Java请求(JavaTest),将Sleep_Time设置为1。

  • 线程组设为100并发,运行10秒中,测试结果如下:

套用公式:并发数=701.3291634089131 x 0.133 = 93.276778679 ,与预期并发数(100)相差较大。初步怀疑是样本数太少,导致偏差较大。

  • 线程组设为100并发,运行30秒中,测试结果如下:

套用公式:并发数=752.193926548995 x 0.129 = 97.033016524692 ,与预期并发数(100)还是有点差距。初步验证怀疑是正确的。

  • 线程组设为100并发,运行180秒中,测试结果如下:

套用公式:并发数=789.7479728492222 x 0.126 = 99.508244579002,与预期并发数(100)基本一致。考虑到性能消耗,可以认定公式的正确性(假象下如果此场景运行无限长时间,那么可以推测出:吞吐量 x 平均响应时间的值无限接近线程组设定的并发值)。

3.QPS与TPS引发的问题

我们再来验证个有趣的问题:

由此图可以推算出:ART为126ms,也就是1s能发送大约7.9365个请求,100并发1秒能发出约:793.650个请求,也就是QPS=793.650笔/秒,与图中吞吐量的值几乎一致。可以看作:当前QPS与吞吐量值相等,而此时的吞吐量可以看成TPS。

我们改动下脚本:

说明:增加了QPS控制器

我们再次执行,结果如下:

笔者脚本中限制了:最大QPS为200,此时吞吐量约为198.682,两者基本一致,进而验证了(笔者感觉导致误差的原因在于:场景启动时需要一个warm up 过程,不能在启动场景的瞬间就达到限制的200QPS)。笔者将脚本中的JAVA请求换成本地HTTP请求,测出的现象均一致,由于篇幅限制就不再赘述。

此时再用老套路计算下QPS,平均响应时间为127ms,推算出1s能发送7.87401笔,100并发能发送787.401笔,我擦了,为啥与预期200笔差距这么大?

注意:这种方式计算出的值只是理论值,因为笔者脚本中已经设置了200QPS限制,并不限制请求的RT(换句话说只限制了单位时间内发送的请求量,再或者可以理解成限流)

结论:单独对QPS与TPS进行对比是没有意义的,他们是不同的衡量指标。在真实的环境下往往一个事务包含多个请求(即多个请求组成一个事务),此时再比较两者,会发现QPS要比TPS大几倍。

VU TPS QPS RT 计算公式的更多相关文章

  1. mysql中TPS, QPS 的计算方式

    今天突然有个同事问题一个问题, mysqlTPS和QPS的计算公式是什么? 以前确实也没有关注过这个计算公式,所以查了下学习了下: 下面是参考内容.  在做db基准测试的时候,qps,tps 是衡量数 ...

  2. 【MySQL】计算 TPS,QPS 的方式

     在做db基准测试的时候,qps,tps 是衡量数据库性能的关键指标.本文比较了网上的两种计算方式.先来了解一下相关概念. 概念介绍: QPS:Queries Per Second         查 ...

  3. 搞懂高并发性能指标:QPS、TPS、RT、吞吐量

      一.QPS,每秒查询 QPS:Queries Per Second意思是"每秒查询率",是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的 ...

  4. PV UV TPS QPS

    名词解释 PV Page View,网页浏览量.网页被读者调用浏览的次数.网页每次打开或刷新一次页面,记录一次.用户对同一页面的多次访问,访问量累计. UV Unique Visitor,独立访问者. ...

  5. 利用脚本获取mysql的tps,qps等状态信息

    #!/bin/bash mysqladmin -uroot -p'123456' extended-status -i1|awk 'BEGIN{local_switch=0;print "Q ...

  6. 性能调优 -- TPS&QPS

    无论在工作中,还是看一些技术文章的时候,经常听到TPS.QPS这两个术语,那么两者分别是什么?又有哪些区别? QPS:query per second,是指单位时间内请求的数量. TPS:表示一个事务 ...

  7. QPS 机器计算公式

    QPS = req/sec = 请求数/秒 QPS = 总请求数 / ( 进程总数 * 请求时间 )QPS: 单个进程每秒请求服务器的成功次数 原理:每天80%的访问集中在20%的时间里,这20%时间 ...

  8. tps,qps

    http://blog.itpub.net/22664653/viewspace-767265/

  9. 利用sysbench进行MySQL OLTP基准测试

      Preface       In order to know clearly about the real performance threshold of database server,we ...

随机推荐

  1. 多线程总结-同步之volatile关键字

    目录 1 案例引出可见性 2 案例引出原子性 1 案例引出可见性 代码解析:新起一个子线程执行m()方法,1秒后主线程将b置为false,子线程是否会停止执行死循环while(b){},打印" ...

  2. 学习4:内容# 1.列表 # 2.元祖 # 3.range

    1.列表 列表 -- list -- 容器 有序,可变,支持索引 列表: 存储数据,支持的数据类型很多 字符串,数字,布尔值,列表,集合,元祖,字典, 定义一个列表 lst = ["dsb& ...

  3. 学习笔记-jvm运行时数据区

    按照线程私有和共享区域来划分 线程私有 程序计数器 指向当前线程正在执行的字节码行号地址,如果是本地方法,值为undefined 虚拟机中唯一不会oom的区域 为什么会有程序计数器 - java天生多 ...

  4. [USACO07FEB]银牛派对Silver Cow Party

    题目简叙: 寒假到了,N头牛都要去参加一场在编号为X(1≤X≤N)的牛的农场举行的派对(1≤N≤1000),农场之间有M(1≤M≤100000)条有向路,每条路长Ti(1≤Ti≤100). 每头牛参加 ...

  5. koa2服务端使用jwt进行鉴权及路由权限分发

    大体思路 后端书写REST api时,有一些api是非常敏感的,比如获取用户个人信息,查看所有用户列表,修改密码等.如果不对这些api进行保护,那么别人就可以很容易地获取并调用这些 api 进行操作. ...

  6. 个人永久性免费-Excel催化剂功能第74波-批量排版格式利器,瞬间美化表格

    PPT和WORD的世界,充满着排版的美化操作,在Excel世界同样也需要对表格.图表的美化,此篇带你进入真正的制表专家行列,使用Excel催化剂的格式管理增强功能加上对美感的艺术造诣,对Excel表格 ...

  7. Shiro授权流程

    1,授权中涉及的一些概念      [1]授权:访问控制,即在应用中认证用户能否访问的系统资源(如一个页面,一个按钮等).      [2]资源:在Web应用中反应为用户可以访问的URL.       ...

  8. 前端手势控制图片插件书写四(图片上传及Ios图片方向问题)

    1.在图片上传中,使用的input的type为File的属性.使用filereader的Api let that = this; var file = document.getElementById( ...

  9. C#编程之接口

    1.定义 接口是把公共方法和属性组合起来,以封装特定功能的一个集合.(一旦定义了接口,就可以在类中实现它.这样类就可以支持接口所指定的所有属性和成员) 注意1:接口不能单独存在.不能像实例化一个类那样 ...

  10. 【Arduino】66种传感器系列实验(1)---干簧管传感器模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和各种模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里 ...