Azure负载测试。了解虚拟用户如何影响性能

Azure负载测试。了解虚拟用户如何影响性能,azure,performance-testing,load-testing,Azure,Performance Testing,Load Testing,我正在尝试理解最近Azure云负载测试的结果,该测试是针对我们的API之一运行的 在测试API时,我将负载测试虚拟用户配置为没有思考时间。因此,从本质上讲,每次虚拟用户收到响应时,它都会立即发送另一个请求 我们也不使用任何类型的用户会话,也不缓存每个用户的任何数据。这是一个基本测试,将一些JSON发布到API上的端点,然后API对接收到的数据执行一些计算 看来,通过改变虚拟用户的数量,我们可以提高服务的性能。我的意思是,它可以更快地响应,并且每秒处理更多的请求 两次负载测试的结果如下所示 第一

我正在尝试理解最近Azure云负载测试的结果,该测试是针对我们的API之一运行的

在测试API时,我将负载测试虚拟用户配置为没有思考时间。因此,从本质上讲,每次虚拟用户收到响应时,它都会立即发送另一个请求

我们也不使用任何类型的用户会话,也不缓存每个用户的任何数据。这是一个基本测试,将一些JSON发布到API上的端点,然后API对接收到的数据执行一些计算

看来,通过改变虚拟用户的数量,我们可以提高服务的性能。我的意思是,它可以更快地响应,并且每秒处理更多的请求

两次负载测试的结果如下所示

第一个测试告诉我,我们的API能够在2分钟内处理60k个请求

我不明白的是,为什么添加更多的虚拟用户会增加平均响应时间并降低RPS,这反过来会导致API在2分钟内只处理55k个请求


为什么API现在只能处理460 RPM,而我们已经知道它可以处理500 RPM?

没有“确切”的单一原因,但请记住,随着load Generator数量的增加,连接数量和服务器上的并行操作数量也在增加。您不能假设,随着时间的推移,通过增加用户负载,您将继续获得更好的吞吐量和响应时间。事实上,有时您会增加负载,并在性能图上找到难以捉摸的“曲线拐点”——延迟峰值(以及请求失败),而吞吐量则急剧下降。从负载测试的角度来看,这将是一件好事,因为您现在对现有软件+基础设施在事务速率等方面的预期有了相当好的了解


您需要进一步深入研究以确定确切原因,但这很容易与线程池耗尽、内存问题、cpu问题、磁盘问题、特定资源(如缓存或数据库)上的瓶颈、网络饱和等有关。

这里有三个问题: 1.为什么更多的虚拟用户会增加响应时间; 2.为什么更多的VU会降低RPS; 3.为什么更多的VU会减少总请求

以下是解释:

  • 更多并发VU会创建更多并发会话,这些会话需要服务器上更多的资源(例如,会话上下文、队列大小、线程并发),从而从客户端的角度增加服务器处理时间和响应时间

  • 在这种情况下,只有当负载生成器以与接收响应无关的恒定频率发出请求时,降低RPS才会不一致。实际上,在发出请求后,每个VU都会等待,直到收到响应。由于服务器响应变慢,等待时间增加,导致RPS减少。 这个问题有第二个答案。由于load generator的性能容量有限,因此模拟更多的VU需要客户端上更多的资源,这可能会导致发出请求的延迟。当您使用零思考时间配置测试时,load generator可能会无意中引入延迟,从而导致额外的RPS降低

  • 请求总数与VU和RP的数量成比例。显然,在您的案例中,RPS的减少产生了更大的影响,总请求数减少了


  • 一般来说,负载测试中VU的增加导致RPS降低的效果看起来像是一个悖论,而实际上并非如此。

    “您现在已经对现有软件+基础设施在事务速率等方面的预期有了相当好的了解”这就是问题所在,现在我不这么认为。我正在进行负载测试,因为我想确保API能够处理500 RPM。从技术上讲,第一次测试处理了500转/秒,没有问题,反应迅速。我不知道生活环境会更接近什么。200个虚拟用户或300个虚拟用户。我在服务本身中有一些性能计数器,因此我可以看到当有更多用户时,服务需要更长的时间来响应。所以我不认为负载生成器在我的测试中无意中造成了延迟。正如您所建议的,它可能与当前会话有关。我会继续挖。谢谢