Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Locust 确定master的理想工人数量和EC2尺寸_Locust - Fatal编程技术网

Locust 确定master的理想工人数量和EC2尺寸

Locust 确定master的理想工人数量和EC2尺寸,locust,Locust,我需要使用蝗虫在10分钟的测试窗口内模拟20000(或更高)用户 蝗虫文件是一个包含9个API调用的任务。我试图确定理想的工作人员数量,以及AWS上EC2应连接多少工作人员。我的测试显示,在两个EC2实例上,有20个工作人员,CPU负载是最小的。然而,主人遭受了巨大的痛苦。一个4 CPU 16 GB RAM系统作为主系统,最终导致工作人员开始打印如下消息: [2020-06-12 19:10:37,312] ip-172-31-10-171.us-east-2.compute.internal/

我需要使用蝗虫在10分钟的测试窗口内模拟20000(或更高)用户

蝗虫文件是一个包含9个API调用的任务。我试图确定理想的工作人员数量,以及AWS上EC2应连接多少工作人员。我的测试显示,在两个EC2实例上,有20个工作人员,CPU负载是最小的。然而,主人遭受了巨大的痛苦。一个4 CPU 16 GB RAM系统作为主系统,最终导致工作人员开始打印如下消息:

[2020-06-12 19:10:37,312] ip-172-31-10-171.us-east-2.compute.internal/INFO/locust.util.exception_handler: Retry failed after 3 times.
[2020-06-12 19:10:37,312] ip-172-31-10-171.us-east-2.compute.internal/ERROR/locust.runners: RPCError found when sending heartbeat: ZMQ sent failure
[2020-06-12 19:10:37,312] ip-172-31-10-171.us-east-2.compute.internal/INFO/locust.runners: Reset connection to master

随着每个蝗虫主进程增加到12GB虚拟RAM,主进程似乎内存耗尽。好-所以EC2有问题。但是如果我需要测试20000个用户,这个星球上有足够大的机器来处理这个问题吗?或者我需要采取不同的方法吗?如果需要,建议的方向是什么?

标题中问题的答案是:“视情况而定”

你的帖子有点让人困惑。你说你有10个主流程?为什么?

这个问题很可能与主机无关,因为它不关心下载的大小(这似乎是您的测试用例和大多数其他蝗虫测试之间的唯一区别)

以下是一些可能会有所帮助的一般提示:

  • 切换到FastHttpUser()
  • 监控您的网络使用情况(如果您的负载组已经在最大限度地利用带宽或CPU,那么您的测试无论如何都是非常不现实的,添加更多的用户只会增加噪音。通常,从低开始,然后逐步提高)
  • 增加装载机的数量

一般来说,用户数量不是Ocust的问题,但每秒的请求数量或带宽可能是。

在我的特定情况下,其中一个步骤是从CloudFront下载一个文件,该文件是在其中一个任务中随机选择的。这意味着到cloudFront的连接越开放,试图下载文件,可用网络就越拥挤

由于应用程序客户端实际上是移动设备上的本机应用程序,并且有很多因素影响每台移动设备的下载速度,因此我决定从GET请求切换到HEAD请求。这允许我从CloudFront测试响应时间,在CloudFront中,分发版受Lambda@Edge使用测试早期数据对用户进行身份验证的函数

这样做可以显著改善负载测试结果,并且不会人为地扭曲其他测试,因为带宽或系统资源耗尽,其他测试都会受到负面影响


使用这种方法,我在10分钟的运行时间内成功地执行了10000个用户的测试。我使用了4个EC2 T2.xlarge实例,每个T2有4个工人。测试计划中的9项任务导致了近750000个URL调用

你在主机上做任何特殊处理吗?20000个用户不应该成为问题(除非我们有bug)。如果你处于超高吞吐量,那么也许你会遇到一些问题。我正在做一些额外的统计数据收集。我想我可以删除它,然后再测试一次。额外的处理是为每个用户获取每个任务的响应时间数据点。但是它是如何实现的呢?如果它做了一些性能密集型的事情(比如为每个请求维护一个响应时间列表),那么它可能是问题的一部分,如果不是,那么问题可能是无关的……是的,基本上就是这样。我已经把它缩小到一个任务,那就是从cloudfront下载mp3。我认为正在发生的事情是我们耗尽了网络连接,导致时间越来越长。然而,这是我们需要进行的测试的一个重要部分。随着网络连接耗尽,其余的API调用时间将增加。我更改了代码,将每个任务序列的时间作为信息放入日志文件中。测试的文件平均为8MB,需要EC2.yep-1 master-10 worker数百毫秒。我想我有一个解决办法。谢谢你的帮助。如果你找到了解决方法,请在这里发布。您甚至可以将其添加为您自己问题的答案。此外,请编辑您的问题,使其有意义(主要是说明“每个蝗虫主进程(共有10个)”的部分)。stackoverflow的意义不仅仅在于你得到了帮助,还有其他人也得到了帮助。