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")
启动命令:
- 启动Master节点:
locust -f locustfile.py --master -u 50 -r 5
- 依次启动两个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一致:
- Master节点:
locust -f locustfile.py --master -u 50 -r 5
- 两个Worker节点:
locust -f locustfile.py --worker --master-host=<你的Master容器IP>
这种方式下,25个QuickstartUser和25个AnotherQuickstartUser都会被拆分分配到两个Worker,每个节点同时运行两类用户,实现负载均衡。
内容的提问来源于stack exchange,提问作者duende5801
相关产品推荐
相关产品推荐

