Locust.io:控制每秒请求数参数

sid*_*idi 6 stress-testing load-testing amazon-web-services locust

我一直在尝试使用Locust.io在EC2计算优化实例上加载测试我的API服务器.它提供了一个易于配置的选项,用于设置连续请求等待时间并发用户数.理论上,rps = 等待时间 X #_users.但是,在测试时,此规则会针对#_users的极低阈值进行细分(在我的实验中,大约有1200个用户).变量hatch_rate,#_ of_slaves,包括在分布式测试设置中,对rps几乎没有影响.

实验信息

该测试已在具有16个vCPU的C3.4x AWS EC2计算节点(AMI映像)上完成,具有通用SSD和30GB RAM.在测试期间,CPU利用率最高达到60%(取决于孵化率 - 控制产生的并发进程),平均保持在30%以下.

Locust.io

setup:使用pyzmq,并将每个vCPU核心设置为从属.单个POST请求设置,请求体~20个字节,响应体~25个字节.请求失败率:<1%,平均响应时间为6ms.

变量:连续请求设置为450毫秒(最小值:100毫秒和最大值:1000毫秒)之间的时间,填充率为每秒30秒,以及通过改变#_users测量的RPS.

Locust.io吞吐量图

RPS遵循预测的方程,最多可达1000个用户.之后增加#_users的收益递减,大约1200个用户达到上限.#_users这里不是自变量,更改等待时间也会影响RPS.但是,将实验设置更改为32个核心实例(c3.8x实例)或56个核心(在分布式设置中)根本不会影响RPS.

那么真的,控制RPS的方法是什么?我有什么明显的遗失吗?

cgb*_*rom 5

(这里是蝗虫的作者之一)

首先,为什么要控制RPS?Locust的核心思想之一是描述用户行为,并使其产生负载(在您的情况下为请求)。蝗虫旨在回答的问题是:我的应用程序可以支持多少个并发用户?

我知道追求某个RPS编号很诱人,有时我也会通过争取任意RPS编号来“作弊”。

但是要回答您的问题,您确定蝗虫不会陷入僵局吗?像这样,它们完成一定数量的请求,然后由于没有其他要执行的任务而变得闲置?不看测试代码就很难说是怎么回事。

建议将分布式模式用于较大的生产环境,并且我运行的大多数实际负载测试都针对多个但较小的实例。但是,如果不使CPU达到最大,这无关紧要。您确定您没有饱和单个CPU内核吗?不确定正在运行什么操作系统,但是如果是Linux,则负载值是多少?

  • 我争取 RPS 的原因之一是因为我了解用户(例如 2 个),但对于 Locust,2 个用户正在生成 110+ RPS 的请求,但在现实世界中,这 2 个用户只能做出每秒 1-2 个请求?这对于确定基于用户的负载有何帮助? (3认同)