这两天做压测,用了Constant Throughput Timer 来限制 QPS。

被压测接口最大 TPS 为 110 左右,在 QPS 达到 110 前,QPS = TPS,而 QPS>110 后,接口 TPS 会稳定在 110。如下图
再增加线程和 Timer 配置都只会导致响应时间的增加,TPS 却不会增加,并且无报错 (注:QPS 指每秒请求数,TPS 指每秒处理请求)

我就在想,如果接口 收到的 QPS 远大于他的处理能力,理论上应该会报错,并且处理能力(TPS)下降, 那为什么 TPS 会稳定呢。
我分析了下测试数据 (下图),

以 10 线程 40QPS 和 75 线程 300QPS 为例,
10 线程时的平均响应时间 为 0.113s,他可以造成 10/0.113=88 的 QPS,但因为 Throughput Timer 配置了 2400(也就是 40QPS),所以他实际 QPS 为 40
75 线程时平均响应时间为 0.625,对应 QPS 为 75/0.625=120,而我设置的 Throughput Timer 是 18000(300QPS),所以 75 线程时,jmeter 根本就没法提供 300QPS
500 线程结果和 75 线程 差不多,虽然 线程和 QPS 配置上去了,但因为响应时间 增加,实际的 QPS 只能达到 120 左右。
所以我最终得出结论是,jmeter 能提供的最大 QPS 只能为接口 TPS , 也就是说,jmeter 不能提供更高的 QPS 来压爆接口

另外,我用 apache 的 AB 也做了同样的测试,结论是一样的。

对于这个结论 我也很吃惊,不知道有没有漏洞,欢迎各位拍脸


↙↙↙阅读原文可查看相关链接,并与作者交流