You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Locust分布式模式下为何无法在每个Worker上启动全部用户类?

解决Locust分布式模式下用户类型负载不均问题

问题根源是Locust默认会将同一用户类的实例集中分配到单个Worker节点,导致单类用户占用CPU过高、负载不均。以下是两种直接可行的解决方法:


方法1:通过用户类权重实现均匀分配

给两个用户类设置相同权重,让Master节点自动将两类用户分散到所有Worker上:

修改你的Locustfile.py,为每个用户类添加weight属性:

import logging

from locust import HttpUser, task, between

logger = logging.getLogger(__name__)

class QuickstartUser(HttpUser):
    wait_time = between(1, 5)
    weight = 1  # 与另一类用户权重保持一致

    @task
    def hello_world(self):
        logger.info(f"QUICKSTART_USER")


class AnotherQuickstartUser(HttpUser):
    wait_time = between(1, 5)
    weight = 1

    @task
    def hello_world(self):
        logger.info(f"ANOTHER_QUICKSTART_USER")

启动命令:

  1. 启动Master节点:
locust -f locustfile.py --master -u 50 -r 5
  1. 依次启动两个Worker节点:
locust -f locustfile.py --worker --master-host=<你的Master容器IP>

配置后,50个用户(两类各25个)会均匀分布在两个Worker上,每个节点都会同时运行两类用户,避免单类用户集中导致的负载失衡。


方法2:固定用户类总实例数

通过fixed_count属性指定每个用户类的总实例数,Locust会自动将这些实例分散到所有Worker节点:

修改Locustfile.py:

import logging

from locust import HttpUser, task, between

logger = logging.getLogger(__name__)

class QuickstartUser(HttpUser):
    wait_time = between(1, 5)
    fixed_count = 25  # 指定该类总用户数为25

    @task
    def hello_world(self):
        logger.info(f"QUICKSTART_USER")


class AnotherQuickstartUser(HttpUser):
    wait_time = between(1, 5)
    fixed_count = 25

    @task
    def hello_world(self):
        logger.info(f"ANOTHER_QUICKSTART_USER")

启动命令与方法1一致:

  1. Master节点:
locust -f locustfile.py --master -u 50 -r 5
  1. 两个Worker节点:
locust -f locustfile.py --worker --master-host=<你的Master容器IP>

这种方式下,25个QuickstartUser和25个AnotherQuickstartUser都会被拆分分配到两个Worker,每个节点同时运行两类用户,实现负载均衡。


内容的提问来源于stack exchange,提问作者duende5801

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 11:34:51