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

如何在Locust分布式负载中并行运行多配置批处理文件

分布式负载测试配置问题及解决方案

测试场景

需针对5个、15个、20个、25个、35个条目,以300用户规模执行负载测试。通过运行.\abc.bat并行触发5个不同批处理文件,命令如下:

start .\abc.bat 5_item.ini <2hour> <300user> <www.xyx.com host>
start .\abc.bat 15_item.ini <2hour> <300user> <www.xyx.com host>
start .\abc.bat 20_item.ini <2hour> <300user> <www.xyx.com host>
start .\abc.bat 25_item.ini <2hour> <300user> <www.xyx.com host> 
start .\abc.bat 35_item.ini <2hour> <300user> <www.xyx.com host>

最终会生成5个对应不同条目数的.html结果文件。

现有问题

单CPU核心无法支撑5种配置下的300用户负载,抛出错误:

connectionerror(protocolerror('connection aborted.', remotedisconnected('remote end closed connection without response')))

架构方案

已确定采用master-worker分布式负载架构,将X机器设为主节点,Y机器设为工作节点。

疑问与解答

疑问1:如何在工作节点Y上开启5个并行进程以利用所有CPU核心?目前仅能运行5条目的配置,其余配置提示地址已被占用,是否需要5台机器分别运行5种配置?

  • 地址被占用的核心原因是多个Locust实例默认使用了相同端口(默认8089),无需5台机器,单台工作节点即可处理,操作步骤如下:
    1. 针对每个配置,在主节点X上启动独立的master实例,指定不同端口:
      # 5_item配置的master,端口8089
      locust -f locustfile_5.py --master -P 8089
      # 15_item配置的master,端口8090
      locust -f locustfile_15.py --master -P 8090
      # 20_item用8091、25_item用8092、35_item用8093,依次类推
      
    2. 在工作节点Y上,为每个配置启动对应数量的worker进程,连接到对应端口的master:
      # 连接5_item的master,启动多个worker利用CPU核心
      locust -f locustfile_5.py --worker --master-host=X机器IP --master-port=8089
      locust -f locustfile_5.py --worker --master-host=X机器IP --master-port=8089
      # 连接15_item的master
      locust -f locustfile_15.py --worker --master-host=X机器IP --master-port=8090
      locust -f locustfile_15.py --worker --master-host=X机器IP --master-port=8090
      # 其余配置以此类推,worker数量根据CPU核心数分配(比如核心数为N,每个配置启动N/5个worker)
      
    3. 修改abc.bat,给每个启动命令添加端口参数,确保每个配置的master/worker使用独立端口,避免冲突。

疑问2:若要在同一机器上同时作为主节点和工作节点以利用所有CPU核心,该如何操作?Locust文档说明不足,且需并行运行5个不同配置文件而非单个文件。

  • 同一机器同时作为master和worker,本质是给每个配置启动独立的master+worker组,每个组使用独立端口,互不干扰:
    1. 针对每个配置,先启动master实例并指定端口:
      # 5_item配置的master,端口8089
      start locust -f locustfile_5.py --master -P 8089
      # 15_item配置的master,端口8090
      start locust -f locustfile_15.py --master -P 8090
      # 其余配置依次指定不同端口
      
    2. 针对每个配置,启动对应数量的worker进程,连接到本机对应端口的master:
      # 给5_item的master启动worker
      start locust -f locustfile_5.py --worker --master-host=127.0.0.1 --master-port=8089
      start locust -f locustfile_5.py --worker --master-host=127.0.0.1 --master-port=8089
      # 给15_item的master启动worker
      start locust -f locustfile_15.py --worker --master-host=127.0.0.1 --master-port=8090
      start locust -f locustfile_15.py --worker --master-host=127.0.0.1 --master-port=8090
      
    3. 可通过参数复用Locust文件,避免重复编写:用同一个my_locustfile.py,通过--env参数传递条目数:
      # 5_item的master
      start locust -f my_locustfile.py --master -P 8089 --env ITEM_COUNT=5
      # 5_item的worker
      start locust -f my_locustfile.py --worker --master-host=127.0.0.1 --master-port=8089 --env ITEM_COUNT=5
      
      在locustfile中通过os.environ.get("ITEM_COUNT")获取条目数,实现逻辑复用。
    4. 之前尝试失败的核心原因是多个master实例共用同一端口,导致地址冲突,给每个配置的master指定独立端口即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:02:40