【性能测试】三、TPS 和并发数是什么关系?

本文解析了并发的概念,包括绝对并发与相对并发的区别及其在实际应用中的意义。通过案例介绍了如何计算并发用户数,并探讨了压力工具中的线程数、响应时间和TPS之间的关系。

一、什么是并发

或许你在网上会得到"绝对并发""相对并发"这两个概念。绝对并发指的是同一时刻的并发数;相对并发指的是一个时间段内发生的事情。

但实际上,我们讲并发的时候不需要去区分上面这2个概念。为什么?

想象中的并发

假设上图中的这些小人是严格按照这个逻辑到达系统的,那显然,系统的绝对并发用户数是 4。如果描述 1 秒内的并发用户数,那就是 16。

实际中的并发

这些用户会分布在系统中不同的服务、网络等对象中。这时候"绝对并发"这个概念就难描述了,你说的是哪部分的绝对并发呢?

所以,在讲并发的时候,不用有“相对”和“绝对”的概念,这样可以简化沟通,也不会出错

至于如何描述上面的并发用户数?可以直接用 TPS 来承载“并发”这个概念。

比如说,并发数是 16 TPS,就是指 1 秒内整个系统处理了 16 个事务。

依赖 TPS 来承载的时候,指的都是 Server 端的处理能力,并不是压力工具上的并发线程数

二、计算并发用户数

并发用户数要基于在线用户数来计算,另外还有一个关键参数:并发度

总共有 32 个用户进入了系统,但是绿色的用户并没有任何动作,那么显然,在线用户数是 32 个,并发用户数是 16 个,这时的并发度就是 50%。

三、压力工具中的线程数、响应时间和 TPS 的关系

首先,压力工具中的线程或用户数不是用来描述性能表现的

"并发用户数"转化到"压力机的并发线程数"

可以先做一个基准测试。

比如,这里有个简单逻辑:

  • JMeter(1 个线程) - Nginx - Tomcat - MySQL

此时,单个线程下 JMeter 的平均响应时间基本都在 5ms。所以它的 TPS 应该接近 1000ms / 5ms = 200TPS

现在启动 10 个线程,平均响应时间在 25ms。现在的 TPS 应该接近 (1000ms / 25ms) * 10 = 400TPS

那么,就有一个计算公式了:

所以,对于压力工具来说,只要不报错,我们就关心 TPS 和响应时间就可以了。因为 TPS 反应出来的是和服务器对应的处理能力,至于压力线程数是多少,并不关键

四、总结

梳理在线用户数、并发用户数、TPS(这里假设了一个用户只对应一个事务)、响应时间之间的关系,需要注意:

  • 通常所说的并发都是指服务端的并发,而不是指压力机上的并发线程数,因为服务端的并发才是服务器的处理能力。
  • 性能中常说的并发,是用 TPS 这样的概念来承载具体数值的。
  • 压力工具中的线程数、响应时间和 TPS 之间是有对应关系的。

在性能项目中,要简化概念,注重实用性。

本文参考:
高楼老师 性能测试实战30讲

性能测试中,并发用户数(通常称为虚拟用户数,Vu)与每秒事务数(TPS)之间存在一定的关系,但它们并不直接等价,而是通过系统的性能特征负载行为相互影响。 并发用户数是指在同一时间对系统执行操作的用户数量。这些用户可以是真实用户,也可以是测试工具模拟的虚拟用户。并发用户数越高,系统所承受的负载通常也越大,尤其是在这些用户执行的操作涉及复杂的业务逻辑或大量的数据处理时。 TPS(每秒事务数)则是衡量系统处理能力的一个关键指标,表示系统每秒可以完成的事务数量。事务可以是一个请求、一个操作或一组操作,具体取决于定义。 两者之间的关系可以通过以下几点来理解: 1. **线性关系的理想情况**:在系统性能良好的情况下,增加并发用户数可能会导致TPS线性增长,因为系统能够有效地处理更多的请求。然而,这种线性增长通常只在一定范围内成立,超过这个范围后,系统可能会因为资源限制而无法继续提升TPS。 2. **瓶颈效应**:随着并发用户数的增加,系统可能会达到一个瓶颈点,此时TPS不再随着并发用户数的增加而显著增加,反而可能导致响应时间增加,甚至出现错误或超时[^1]。 3. **资源利用**:并发用户数的增加会占用更多的系统资源(如CPU、内存、网络带宽等)。当资源接近饱时,TPS的增长将变得缓慢,甚至下降。 4. **响应时间的影响**:TPS与响应时间密切相关。在并发用户数不变的情况下,如果响应时间减少,TPS会增加,反之亦然。 为了更好地理解这两者之间的关系,可以通过性能测试工具(如JMeter、LoadRunner等)进行实验,观察不同并发用户数下的TPS变化,从而找出系统的最佳负载点瓶颈所在。 ### 示例代码:使用Python模拟并发用户请求 ```python import threading import time def simulate_user(): # 模拟用户操作,如发送HTTP请求 time.sleep(0.1) # 模拟请求处理时间 # 设置并发用户数 concurrent_users = 100 # 创建线程列表 threads = [] # 启动并发用户 for _ in range(concurrent_users): thread = threading.Thread(target=simulate_user) threads.append(thread) thread.start() # 等待所有线程完成 for thread in threads: thread.join() print(f"Completed {concurrent_users} users simulation.") ``` ### 性能测试工具中的Vu与TPS换算 在性能测试工具中,通常可以通过调整并发用户数思考时间(Think Time)来控制TPS。例如,在JMeter中,可以通过“定时器”来控制请求之间的间隔,从而影响TPS。具体的换算公式可能因工具测试场景的不同而有所差异,但通常需要考虑以下因素: - 并发用户数 - 每个用户的操作频率(即每分钟或每秒执行的事务数) - 系统的响应时间 通过调整这些参数,可以更精确地模拟实际用户行为,并评估系统在不同负载下的表现。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值