性能测试实战 30 讲
高楼
前 HP 高级性能专家,7DGroup 创始人
45941 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 37 讲
性能测试实战 30 讲
15
15
1.0x
00:00/00:00
登录|注册

05丨指标关系:你知道并发用户数应该怎么算吗?

不推荐用CPU计算并发数
不推荐使用绝对并发和相对并发概念
服务端的并发能力
压力机并发线程数
响应时间
服务器处理能力
压力工具线程数
并发度
最大在线用户数
缓存服务器
计算方法
并发概念
并发描述复杂性
相对并发
绝对并发
故事分享
CPM
HPS
QPS
RPS
TPS
思考题
总结
压力工具与服务器处理能力
在线用户数与并发用户数
并发用户数
指标统一认识
沟通上的偏差
性能指标
性能指标关系

该思维导图由 AI 生成,仅供参考

我在性能综述的那三篇文章中,描述了各种指标,比如 TPS、RPS、QPS、HPS、CPM 等。我也强调了,我们在实际工作的时候,应该对这些概念有统一的认识。
这样的话,在使用过程中,一个团队或企业从上到下都具有同样的概念意识,就可以避免出现沟通上的偏差。
我说一个故事。
我以前接触过一个咨询项目。在我接触之前,性能测试团队一直给老板汇报着一个数据,那就是 10000TPS。并且在每个版本之后,都会出一个性能测试报告,老板一看,这个数据并没有少于 10000TPS,很好。 后来,我进去一看,他们一直提的这个 10000TPS 指的是单业务的订单,并且是最基础的订单逻辑。那么问题来了,如果混合起来会怎么样呢?于是我就让他们做个混合容量场景,显然,提容量不提混合,只说单接口的容量是不能满足生产环境要求的。
结果怎么样呢?只能测试到 6000TPS。于是我就要去跟老板解释说系统达到的指标是 6000TPS。老板就恼火了呀,同样的系统,以前报的一直是 10000TPS,现在怎么只有 6000TPS 了?不行,你们开发的这个版本肯定是有问题的。于是老板找到了研发 VP,研发 VP 找到了研发经理,研发经理找了研发组长,研发组长又找到了开发工程师,开发工程师找到了我。我说之前不是混合场景的结果,现在混合容量场景最多达到 6000TPS,你们可以自己来测。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

在性能测试中,正确理解并发用户数与TPS的关系至关重要。本文强调了统一认识各种性能指标的重要性,以避免沟通偏差。通过案例分析,作者指出了对性能指标的误解可能导致沟通障碍和问题的发生。文章介绍了绝对并发和相对并发的概念,以及在线用户数、并发用户数的计算方法。作者强调了在性能测试中应该关注服务器端的处理能力,而不是压力工具上的并发线程数。总的来说,文章强调了在性能测试中应该使用统一的性能指标,同时强调了对并发用户数和在线用户数的正确理解和计算方法。通过示例和思考题,读者可以更好地理解并发能力描述、避免混淆概念以及不推荐使用CPU来计算并发数的原因。文章简洁明了,强调实用性,对读者在性能项目中的实践具有指导意义。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《性能测试实战 30 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(151)

  • 最新
  • 精选
  • zuozewei
    第一个问题:如何理解“服务端的并发能力”这一描述? 首先我们从数据视角来理解,可以把服务端程序用一个模型来看待,即由「网络 API 请求」所驱动的。 服务端的领域特征是大规模的用户请求,以及 24 小时不间断的服务。但某种意义上来说更重要的原则是:坚决不能丢失用户的数据,即他认为已经完成的业务状态。服务端必须保证其业务状态的可靠性,这时业务状态才持久化写入到外存。所以对于服务端来说,存储至关重要。它不只是极大地解放了处理效率,也是服务端的性能瓶颈所在。几乎所有服务端程序扛不住压力,往往都是因为存储没有扛住压力。 在衡量服务端的性能,我们还是要服务端视角来看,主要以 TPS 为主来衡量系统的吞吐量,如果有必要用并发用户数来衡量的话,需要一个前提,即响应时间(RT),因为在系统压力不高的情况下,将思考时间(等待时间)加到场景链路中,并发用户数基本还可以增加一倍,因此用并发用户数来衡量系统的性能没太大的意义,也不专业。 第二个问题:我为什么不提倡使用“绝对并发”和“相对并发”的概念呢? 我觉得一切的前提是业务价值需要。如果没有足够的价值,那么可读性才是第一,对这种难懂的概念很反感,要知道的其会加重内部沟通的难度,得不偿失。如果没那个价值,简单才是王道。 第三个问题:我们为什么不推荐用 CPU 来计算并发数? 比如单核CPU情况,实际上是只有一个的,在一个特定时刻也只可能有一个程序跑在一个CPU上(因为寄存器只有一组),但是我们在上层观察到的却是系统上好像同时运行着那么多的程序,这实际上是操作系统用进程这个概念对CPU做的抽象。 同时如果你了解「阿姆达尔定律」,就知道多处理器并行加速,总体程序受限于程序所需的串行时间百分比,超过一定的并行度后,就很难进行进一步的速度提升了。并不符合线性关系,也无法估算的。 再说服务端程序性能依赖不仅仅是底层的硬件,其依赖的基础软件还包括:操作系统、编程语言、负载均衡、中间件、数据库或其他形式的存储等。在第一个问题中提到了几乎所有服务端程序扛不住压力,往往都是因为存储没有扛住压力。 最后,还是需要回到第一个问题,即由「网络 API 请求」所驱动的模型上来。

    作者回复: 不仅深得真传,还扩展了。 我看好你哦。

    2019-12-25
    12
    66
  • 葛葛
    对于并发度还不太理解。请问有历史线上数据的情况如何计算并发度,没有的情况又如何估算呢?能否分别举例说明一下。

    作者回复: 我觉得这个会是比较简单直接的过程,所以就没有细写。逻辑如下: 1. 统计某时段的当前在线用户数; 2. 统计同一时段的操作某个功能的用户数; 3. 把所有功能操作的用户数都统计出来; 4. 将统计出来的用户数除以在线用户数就知道并发度了。

    2020-01-17
    8
    26
  • 律飛
    问题一,如何理解“服务端的并发能力”这一描述。对于web项目而言,服务端是整个项目的关键,是咽喉要道,因此也是性能测试的重点。测试目的当然是要摸清这个要道能同时走多少人(注意这里的人不是在线用户数并发用户数,而是服务器能处理的事务),因此TPS最能描述服务端的并发能力。虽然老师一直强调压力机并发线程数不是关键,但是公式表明其与TPS、响应时间有着不可分割的联系,还需要好好体会并运用。很期待基准测试以及如何判断响应时间、TPS合理的后续讲解。 问题二,为什么不提倡使用“绝对并发”和“相对并发”的概念呢?老师讲得很清楚了,这两个概念对于我们关心的性能并没有太多的帮助,反而让人有点无从使用。在线人数,并发数,并发度简洁明了,很好理解,有利于沟通,是性能测试必备指标之一。 问题三,为什么不推荐用 CPU 来计算并发数?并发数是业务逻辑层面的,而CPU只是众多软硬件环节中的一环,即使可以借鉴,肯定也是很粗略的估计,在实践中使用价值不大,没有推广使用的必要。

    作者回复: 这个理解太正确了。比我写的好。

    2019-12-25
    3
    24
  • 月亮和六便士
    老师,我们一般根据日志可以拿到在线用户数,但是并发度是百分之一还是百分之十这是全靠拍脑袋算的吗?

    作者回复: 通过统计每秒的业务请求数以及比例就可以知道并发度了呀。 可不能把脑袋拍坏了。

    2019-12-25
    13
    8
  • 老师,看一下以下的推导是不是正确 对公式TPS计算公式总结: TPS就是单位时间处理事务的数量, server TPS = △事务数 / △t = 线程数 * 单个线程的事务数 / △t JMeter上给的时间是单个事务的平均时间

    作者回复: 对的。

    2020-05-20
    6
  • JK
    高老师您好,仍有些疑问冒昧咨询。 某项目进行接口压测,提出需满足并发800且响应时间<5秒,当时的场景设置就直接发起800线程进行负载,结果出现大量超时异常。 学习本节后,将TPS概念投射进来。假如使用TPS理解衡量并发能力的话,原文中的并发800是否等价于800TPS吗? 参照文中例子,指服务器的TPS是100,线程TPS是20,因此推算出压测只需要发起5个线程进行负载即可。 切换到开头的例子,是否可理解服务器的期望TPS是800,而单个线程TPS是0.5(接口调用的rt是2000ms),按此验算的话压测需要发起1600线程负载才能达到原定TPS(0.5*1600=800?)。而1600个线程是否等价于N个线程*循环M次呢?

    作者回复: 理解的有问题哦。 “学习本节后,将TPS概念投射进来。假如使用TPS理解衡量并发能力的话,原文中的并发800是否等价于800TPS吗?” 答:显然不是的,你如果用压力线程800的话,就得看响应时间是多少、TPS是多少,这个压力线程数显然不是TPS。 ”参照文中例子,指服务器的TPS是100,线程TPS是20,因此推算出压测只需要发起5个线程进行负载即可“ 答:这个理解的对。 ”切换到开头的例子,是否可理解服务器的期望TPS是800,而单个线程TPS是0.5(接口调用的rt是2000ms),按此验算的话压测需要发起1600线程负载才能达到原定TPS(0.5*1600=800?)。而1600个线程是否等价于N个线程*循环M次呢“ 答:如果接口调用的响应时间是2s,那显然一个线程的TPS就是0.5。假设响应时间不会随着线程的增加而增加,那你就需要1600个线程才能达到800tps的要求。而这1600个压力线程,显然不能等价于N个线程*循环M次,而是1600个压力线程才对。

    2020-03-09
    11
    6
  • hou
    ‘’这时对 Server 来说,它处理的就是 100TPS,平均响应时间是 50ms。50ms 就是根据 1000ms/20TPS 得来的(请注意,这里说的平均响应时间会在一个区间内浮动,但只要 TPS 不变,这个平均响应时间就不会变)。‘’ 这里不太明白一点,tps是每秒完成的事物数,还是每秒在处理的事物数,还是每秒请求的事物数? 如果按照引用文中所示,1000/20=50的响应时间,我理解为20tps为每秒完成的事物数。 在前一章例子中,在线10000人,并发度5%,算出的500个tps,又让我感觉tps是指每秒的事物并发请求数。 在我的理解中,请求数和完成请求数是不同的

    作者回复: TPS是完成的事务数。 你说的20tps是一个线程的。 你后面的这句话,里面有好几个概念,我们简化一下:500tps就是并发数。这样是不是简单些? 我这里写到的都是有请求有响应的才叫一个T,只请求不响应,那是半个T。

    2020-02-29
    6
  • 顺利
    服务端线程的工作情况图在哪里看呢老师?linux服务器上还是jmeter有监控插件

    作者回复: java的可以用jvisuamvm之类的工具看。

    2020-01-21
    2
    6
  • 柚子
    老师,我有个问题想问下,如果只知道在线用户数,不知道并发度和相应时间,怎么计算并发用户呢?

    作者回复: 没法计算,只能蒙了。

    2020-04-14
    5
  • 秋刀鱼滋味
    就是说算好并发度就不需要设置思考时间之类的了吗

    作者回复: 不需要。

    2020-03-09
    4
    5
收起评论
显示
设置
留言
99+
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部