性能测试工具 关于压力测试中 TPS 和并发数的疑惑

Aiden · 2020年09月25日 · 最后由 ganci 回复于 2022年07月15日 · 16983 次阅读

最近在研究压力测试,有一个问题一直没有想明白,想请大家帮我答疑解惑。问题是关于压测中 TPS 和并发量
我使用 Jmeter 对系统的某个接口进行 200 路并发压测,从聚合报告中可以看出:

关于 TPS 和并发量计算方法如下:

TPS = 系统每秒处理的事务数 = 某段时间系统处理的总请求数S / 某段时间 T = 4000 / 51 = 78.4 这个数据没有问题和jmeter展示的数据偏差不大
并发量 = 系统在某一时刻同时处理的事务数 = TPS * 平均响应时间 AVGRS = 78.4 * 1.961 = 153

我的疑惑就在:并发量和我在 jmeter 中设置的线程数 200 有什么关系,为什么并发数不是 200。

共收到 16 条回复 时间 点赞

启 200 个线程不等于有 200 个并发吧

在路上 回复

1.我在 jmeter 中设置 200 个线程,那理论的并发数应该就是 200。
2.我计算出来的实际并发数是 153。

我可不可以这样理解,这个差值是由于:
服务器处理性能不足,导致我虽然让 200 个用户同时去登录,但是有部分用户的请求卡在了通道上,只有 153 个用户在登录,其余的处于等待状态。
等前面 153 个用户登录完了,剩下的 47 个用户才能去登录 (服务器才能处理这些请求)。

Aiden 回复

实际并发数是怎么计算出来的?

在路上 回复

实际并发数 = 系统在某一时刻同时处理的事务数 = 某一时刻同时登录的用户数 = TPS * 平均响应时间 AVGRS = 78.4 * 1.961 = 153

Aiden 回复

你的推测有一定可能性,但是原因可能如下:
(1)被测服务最大连接数限制导致(这个可以查看一下当前连接数是否达到了最大连接数);
(2)被测服务资源有限,无更多资源分配给新建连接数导致;
(3)压力机资源限制,导致无更多资源分配给并发线程;

Aiden 回复

不是这么算的,这块的概念你没搞清楚。先查一下,什么叫实际并发数?

同一时刻同时登录的用户数 != TPS * 响应时间,这个公式完全不成立。
严格意义上的并发用户数:指与系统建立连接,并对系统发起请求,对系统造成压力的用户;
注意:并发用户数不能完全代表对系统的压力,比如 100 并发用户与系统建立了连接,每秒发一次请求,每 10 秒发一次请求,这两种行为对系统的压力是完全不一样的。

可以通过查询 被测服务器有多少来源于压力机的 IP 与服务器建立了连接,来计算真实并发。

恒温 回复

社区的人真的要好好看看这些基础。

亲,取 95% 或者 90% 的响应时间哦

Aiden #11 · 2020年09月28日 Author

在计算什么东西的时候,取 95%line?

Aiden 回复

靠谱一点的结果,都是取 95% 响应时间

你派遣了 200 个士兵(线程数)前去攻城
但是护城河上的桥(性能瓶颈)只允许 150 个士兵同时通行,剩下的士兵只能排队(所以 TPS 上不去了)

你 200 的并发设置集合点了吗,如果设置了集合点,又长时间跑的话,中间那个线程启动时间肯定是加到你的总时长里去了,况且计算 TPS 的时候为什么要除以总时长呢

所以结论是什么?
并发数=TPS * RT(平均响应时间)在未达到瓶颈时是成立的,达到瓶颈后就开始不成立了?

线程数当然不能等同于并发数了,难不成你想一条线程只输出一个 TPS?? 那假如我要 30000 并发,你要开 30000 线程? 那你 CPU 几 C 的?这会有多频繁的上下文切换?有多少资源耗费在其中?
实际并发数=发压端线程数每个线程输出的 TPS
TPS=(1000ms/平均响应事件)
发压端线程数
你 TPS 不变的情况下,加线程数只能拉低响应时间,没有其他意义

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册