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

在考虑压力工具中的用户数(有些工具中称为线程数,本文后续都用“用户数”来说明)、响应时间、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. C#如何加载嵌入到资源的非托管dll

    如何加载非托管Dll 我们总会遇到需要加载非Win32的非托管dll,这里推荐一种方式就是将那些非win32的非托管dll嵌入资源的方式,在入口解压并且加载的方式,我先来看看如何实现吧,首先我们准备好 ...

  2. opencv——轮廓发现与轮廓(二值图像)分析

    引言 二值图像分析最常见的一个主要方式就是轮廓发现与轮廓分析,其中轮廓发现的目的是为轮廓分析做准备,经过轮廓分析我们可以得到轮廓各种有用的属性信息. 这里顺带提下边缘检测,和轮廓提取的区别: 边缘检测 ...

  3. [re模块、json&pickle模块]

    [re模块.json&pickle模块] re模块 什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则 ...

  4. .Net Core·热加载的实现及测试

    阅文时长 | 0.25分钟 字数统计 | 460字符 主要内容 | 1.引言&背景 2.解决原理&方法 3.声明与参考资料 『.Net Core·热加载的实现及测试』 编写人 | SC ...

  5. curl: (35) SSL connect error

    curl: (35) SSL connect error weixin_34212762 2018-02-23 20:16:23  230  收藏 文章标签: 运维 版权 阿里云的机器,昨晚githu ...

  6. sed -i '14s/yes/no/' tftp

    修改tftp 内容 # cd /etc/xinetd.d/[root@localhost xinetd.d]# cp tftp tftp.bak[root@localhost xinetd.d]# c ...

  7. ipmitool -I lanplus -H IPADDR -U USERNAME -P PASSWORD power reset

    IPMI是智能型平台管理接口(Intelligent Platform Management Interface)的缩写,是管理基于 Intel结构的企业系统中所使用的外围设备采用的一种工业标准,该标 ...

  8. 007.Python循环语句while循环嵌套

    1 使用两个循环打印十行小星星 j = 0 while j<10: # 打印一行十个小星星 i = 0 while i<10: print("*",end=" ...

  9. Java 四种内置线程池

    引言 我们之前使用线程的时候都是使用 new Thread 来进行线程的创建,但是这样会有一些问题 每次 new Thread 新建对象性能差 线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可 ...

  10. 记一次MySQL(5.7版本)数据库的主从同步和备份

    我遇到的问题 我先后在BAT三大云服务器商购买了学生机,配置如下 百度云2核/4G 阿里云1核/2G 腾讯云1核/2G 我的解决方案 由于我不知道百度云的续费规则,导致买了2核/4G的服务器之后以为像 ...