【问题标题】:reqs/sec not correct when load testing with Python Locust使用 Python Locust 进行负载测试时,reqs/sec 不正确
【发布时间】:2018-12-13 01:17:36
【问题描述】:

在我的测试中,min_waitmax_wait 都设置为 1 秒,我将用户设置为 100,所以我预计 reqs/sec 接近 100。

我知道 Locust 实际上需要等待服务器响应然后发送下一个请求。即使,如果服务器响应快,比如 20 毫秒,结果 TPS 应该接近 100,比如 92。

但实际上是10,如下图所示:

我错过了什么?

我的代码如下:

class UserBehavior(TaskSet):   

    @task(1)
    def list_teacher(self):
        self.client.get("/api/mgr/sq_mgr/?action=list_teacher&pagenum=1&pagesize=100")

    @task(1)
    def list_course(self):
        self.client.get("/api/mgr/sq_mgr/?action=list_course&pagenum=1&pagesize=20")


class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait = 1000
    max_wait = 1000

【问题讨论】:

  • 这与stackoverflow.com/q/53737188/10653038的问题完全相同
  • 那篇文章中的答案并不能说服我。在我的测试中,您可以从平均响应时间的统计数据中发现我的服务器响应非常快。但是TPS还是比我预想的低很多,甚至不是100TPS,应该是90TPS,为什么是10TPS?
  • 你的跨度率是多少?
  • 谁知道@Jcyrss - 这可能有很多原因。大多数人认为他们的服务比它更快且可扩展(几乎所有我作为 Locustio 维护者看到这方面的问题时,服务最终都会成为问题)。
  • @Siyu,我尝试了从每秒 10 到 100 的许多孵化率,TPS 在很长一段时间后都无法接近 100。

标签: python locust


【解决方案1】:

我用最少的服务复制了您的场景,该服务在 10 毫秒睡眠后响应并且能够达到 98 次请求/秒。

Name                                                          # reqs      # fails     Avg     Min     Max  |  Median   req/s
--------------------------------------------------------------------------------------------------------------------------------------------
 POST call1                                                      1754     0(0.00%)      20      13      34  |      20   47.90
 POST call2                                                      1826     0(0.00%)      20      13      30  |      20   50.10
--------------------------------------------------------------------------------------------------------------------------------------------
 Total                                                           3580     0(0.00%)                                      98.00

所以参数没问题。

数字较低的原因可能是什么:

  • 服务本身响应缓慢
  • 并行请求的数量是有限的。也许您在关键路径上有一个大小为 5 的线程池,这会限制您的 rps。
  • 未考虑网络延迟。 Locust 仅在任务完成后才会启动等待,因此如果服务在 10 毫秒内响应,但您有 90 毫秒的往返时间,那么您将获得 100 毫秒的端到端时间。我敢打赌,尤其是当您从本地机器上对某些服务器进行负载测试时。
  • 蝗虫本身可能很慢。毕竟是蟒蛇。对我来说,它的上限为 ~550 rps(我会说相当低),因为 IO 事件循环达到了一个核心的 100%。

【讨论】:

    猜你喜欢
    • 2020-01-02
    • 2016-07-09
    • 2019-12-26
    • 2021-07-29
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    相关资源
    最近更新 更多