我正在尝试了解最近的Azure云负载测试的结果,我们针对其中一个API运行
在我测试API时,我已经将负载测试虚拟用户配置为没有思考时间。基本上,每次虚拟用户收到响应时,它都会立即发送另一个请求。
我们也没有使用任何类型的用户会话,也没有为每个用户缓存任何数据。这是一个基本测试,它将一些JSON发布到API上的端点,然后API会对其收到的数据执行一些计算。
看来,通过更改虚拟用户的数量,我们可以使服务更高效。我的意思是,它可以更快地响应并仍然每秒处理更多请求。
两次负载测试的结果如下所示。
第一个测试告诉我,我们的API能够在2分钟内处理60k请求。
我无法理解的是,为什么添加更多虚拟用户,增加平均响应时间并降低RPS,从而导致API仅在2分钟内处理55k请求。
为什么API现在只能处理460 RPS,而我们已经知道它可以处理500 RPS?
答案 0 :(得分:1)
这里有3个问题: 1.为什么更多的虚拟用户会增加响应时间; 2.为什么VU会降低RPS; 3.为什么VU会减少总请求数。
以下是解释:
更多并发VU会创建更多并发会话,这些会话需要服务器上的更多资源(例如会话上下文,队列大小,线程并发),从客户角度来看,这会增加服务器处理时间和响应时间。
< / LI>只有在负载生成器发出频率恒定且无法接收响应的请求时,降低RPS才会在这种情况下不一致。实际上,在发出请求之后,每个VU等待直到收到响应。由于服务器响应变慢,等待时间增加,导致RPS降低。 这个问题有第二个答案。由于负载生成器性能容量有限,因此模拟更多VU需要客户端上的更多资源,这可能导致发出请求的延迟。当您将测试配置为零思考时,负载生成器可能会无意中注入导致额外RPS减少的延迟。
总请求数与VU和RPS数量成比例。显然,在您的情况下,RPS减少会产生更大的影响,并且总请求数量会减少。
通常,在负载测试中增加VU导致的降低RPS的效果看起来像一个悖论,而实际上并非如此。
答案 1 :(得分:0)
没有“确切”的单一原因,但请记住,随着您增加负载生成器的数量,您还会增加连接数,服务器上的并行操作数等。您不能认为,随着时间的推移增加用户负载,您将继续获得更好的吞吐量和响应时间。实际上,有时候你会增加负载,并在性能图上找到难以捉摸的“曲线拐点” - 延迟峰值(以及请求失败),而吞吐量急剧下降。从负载测试的角度来看,这将是一件好事,因为您现在对交易率等方面对现有软件+基础架构的期望非常了解。
您需要深入研究确切原因,但它可能很容易与线程池耗尽,内存问题,CPU问题,磁盘问题,特定资源(例如缓存或数据库)瓶颈,网络有关饱和度等。