最近在写一些东西的时候,把一些内容整理了一下。

在考虑压力工具中的用户数(有些工具中称为线程数,本文后续都用“用户数”来说明)、响应时间、TPS三者之间的关系时,想到之前也有人问起过这样的问题,就是他们三者之间的共生的关系到底是什么样呢。

这个公式我想谁都能知道了:

TPS = ( 1 / RT ) * user  (其中,RT单位是秒,user是用户数)

先来画一下最简单的图(假设前提:每个user的事务定义都是一致的。):

当有五个用户时,响应时间都稳定保持在0.2s,那这个场景的TPS显然是:

TPS = (1/0.2)*5 = 25

这是最简单的计算了。

(也许你会说:“咳,不对,因为线画歪了!” 

你过来,我保证揍不死你。)

 

这个看似简单的公式,在实际的场景中却是会出现千奇百怪的结果。因为大部分的场景都不会如此规整,例如:

这种情况下怎么计算TPS呢:

TPS = 2 + 4 + 6 + 4 + 1 = 17

显然响应时间也是变化较大的,可能每个用户的每个事务的响应时间都是不一样的。

在真实的场景中,这样的情况是必然会出现的,所以在计算TPS的时候,压力工具采用的是:

  1. 先采集原始数据。即每个用户每个事务都记录下来。

  2. 再根据粒度计算。TPS散点值 = 事务数 / 粒度

这样的计算结果再通过曲线表现出来。就会受几个因素的影响:用户数、粒度、响应时间。

当粒度过大时,就会平均掉毛刺的影响;当粒度过小时,就会产生过多的事务点,让人抓狂。

那到底什么样的TPS和响应时间是让人满意的呢?像这样吗?

响应时间随用户数上升而上升,TPS达到上限后变平;

这显然不是让人满意的曲线,因为我们希望的是响应时间不要增加那么快。

那这样的曲线呢?

响应时间有增加,但是增加的趋势并不快,TPS也一直有增加的趋势,这就显然系统还有容量的空间,就看性能指标该如何确定了。

我们多么希望这三者的关系像这个图呀。

响应时间从来没有增加过,TPS一直在增加,系统性能在测试范围内没有衰减。

当然,这是不可能的。

通常情况下,我们都要面对更复杂点的场景。如下图:

在这个非常简单的场景下,我们也看到了响应时间无理的跳动。还好幅度并不大。所以才保证了TPS在每个不同的用户梯度下相对的稳定。但是显然后面TPS已经达到上限了,响应时间开始增加得非常快。

对于这样的场景来说,已经算是非常清晰的用户数、TPS、RT的关系了。

而对于一些这三者关系根本找不到的性能场景,首先要做的就是要把场景判断清晰,让曲线变得稳定,再判断瓶颈,然后才是定位瓶颈及分析根本原因。

想让曲线变得稳定,就涉及到场景的执行策略了。

递增用户和场景的连续性是一定要保证的,只是梯度要根据实际的情况来判断。

今天先聊这么多,以后碰到有人问类似的问题再接着聊。

性能分析之用户数(线程数)/响应时间/TPS的关系的更多相关文章

  1. cpu个数、核数、线程数、Java多线程关系的理解

    cpu个数.核数.线程数.Java多线程关系的理解 2017年12月08日 15:35:37 一 cpu个数.核数.线程数的关系 cpu个数:是指物理上,也及硬件上的核心数: 核数:是逻辑上的,简单理 ...

  2. Tomcat线程数与处理速度的关系

    问题:Tomcat线程数是不是越大越好呢? 答案肯定是否定的. Tomcat的处理速度跟线程数不是完全成正比的,设置不恰当会出现相反的效果.服务的负载计算包括了CPU的使用率和资源等待. 第一种情况, ...

  3. 证明线程池ThreadPoolExecutor的核心线程数,最大线程数,队列长度的关系

    关于线程池的几个参数,很多人不是很清楚如何配置,他们之间是什么关系,我用代码来证明一下. package www.itbac.com; import java.util.concurrent.*; p ...

  4. top命令之性能分析

    top命令详解 当前时间20:27:12 当前系统运行时间3:18秒    1个用户   系统负载平均长度为0.00,0.00,0.00(分别为1分钟.5分钟.15分钟前到现在的平均值) 第二行为进程 ...

  5. 聊下并发和Tomcat线程数(错误更正)

    本文前半部分结论存在严重错误,请看最后2015-1-20更新部分. 最近一直在解决线上一个问题,表现是: Tomcat每到凌晨会有一个高峰,峰值的并发达到了3000以上,最后的结果是Tomcat线程池 ...

  6. 浅谈并发和tomcat线程数

    假设Tomcat每到固定一个时间会有一个高峰,峰值的并发达到了3000以上,最后的结果是Tomcat线程池满了,日志看很多请求超过了1s. 服务器性能很好,Tomcat版本是7.0.54,配置如下 & ...

  7. 并发和Tomcat线程数

    转自 http://zhanjindong.com 最近一直在解决线上一个问题,表现是: Tomcat每到凌晨会有一个高峰,峰值的并发达到了3000以上,最后的结果是Tomcat线程池满了,日志看很多 ...

  8. 性能分析之CPU分析-从CPU调用高到具体代码行(JAVA)

      通常情况下,性能报告中只说CPU使用率高的时候,并不能帮助定位问题.因为CPU高会有多种不同的情况.CPU有五种状态(us sy id wa st), 在vmstat中能显示出来,这个想必很多人都 ...

  9. Java application 性能分析分享

    性能分析的主要方式 监视:监视是一种用来查看应用程序运行时行为的一般方法.通常会有多个视图(View)分别实时地显示 CPU 使用情况.内存使用情况.线程状态以及其他一些有用的信息,以便用户能很快地发 ...

随机推荐

  1. Python分支结构你真的搞定了吗?

    分支结构 分支结构能够让计算机像人一样进行思考,应对不同的场景做出不同的回应. Python中不支持switch语法,目前仅支持if/else形式,但是在Python3.10的测试版本中,貌似支持了s ...

  2. CRM是什么意思,有哪些作用?

    我们总会听到一些人提到CRM或CRM系统,但是通常不知道它的含义,所以今天小Z就来详细介绍一下CRM. GartnerGroup1993年首次提出了这一概念:所谓的客户关系管理就是为企业提供一个全面的 ...

  3. 阿里云RDS数据库到期实例被清除,别急着哭(阿里没有删库跑路),或许还有一线生机

    阿里资源到期未续费,数据保存期限: ECS实例的保存期是15天. Redis实例的保存期是7天. RDS实例的保存期也是7天. 过期当天会收到一条短信: [阿里云]尊敬的用户:您的RDS实例(实例ID ...

  4. 24.Qt Quick QML-Canvas和Context2D详解

    1.Canvas介绍Canvas是一个允许绘制直线和曲线.简单和复杂的形状.图形和引用的图形图像.它还可以添加文本.颜色.阴影.渐变和图案,并执行低级别像素操作.Canvas输出可以另存为图像文件或序 ...

  5. [bug] kibana:prevMsg":"Request Timeout after 3000ms

    ES启动问题,内存不足 https://blog.csdn.net/qq_40907977/article/details/104499178 修改ES启动内存 https://blog.csdn.n ...

  6. [Qt] 事件机制(一)

    事件主要分为两种: 在与用户交互时发生.比如按下鼠标(mousePressEvent),敲击键盘(keyPressEvent)等 系统自动发生,比如计时器事件(timerEvent)等 每种事件对应一 ...

  7. 【转载】Python 代码调试技巧

    https://www.ibm.com/developerworks/cn/linux/l-cn-pythondebugger/ Python 代码调试技巧 张 颖2012 年 5 月 03 日发布 ...

  8. CentOS7中下载RPM及其所有的依赖包

    CentOS7中下载RPM及其所有的依赖包 转载beeworkshop 最后发布于2019-09-28 07:43:40 阅读数 1096  收藏 展开 利用 Downloadonly 插件下载 RP ...

  9. rsync+inotify实现全网自动化数据备份

    第1章 环境配置 实例1-1 服务器及IP主机名规划 已知 4 台服务器主机名主机对应信息见下表: 服务器说明 外网 IP(NAT) 内网 IP(NAT)  主机名 web服务器 10.0.0.7/2 ...

  10. linux动态链接库和静态链接库

    Linux下静态链接库与动态链接库的区别 引言 通常情况下,对函数库的链接是放在编译时期(compile time)完成的.所有相关的对象文件 (object file)与牵涉到的函数库(librar ...