如何在AWS EC2上运行Locust分布式压测而无需开启多个会话?
单EC2部署Locust分布式集群解决方案
无需创建多台EC2实例,直接在现有单台EC2上启动多进程主从集群即可解决单进程CPU瓶颈问题,Locust原生支持同主机下多worker进程挂载到同一master节点,操作步骤如下:
前置准备
确保你EC2上安装的Locust版本为2.15及以上,旧版本分布式通信参数存在兼容性差异,可能导致worker连接失败。
手动启动流程
- 启动master进程:master仅负责调度任务、展示统计数据,不生成实际压测流量,启动命令:
locust -f 你的压测脚本.py --master --web-host 0.0.0.0
不需要Web UI的场景可追加--headless参数,直接在命令中指定总用户数、爬升速率即可。 - 启动worker进程:worker负责生成实际压测流量,可根据EC2的vCPU数量决定启动数量,建议每个vCPU启动1~2个worker,避免CPU占用过高,启动命令:
locust -f 你的压测脚本.py --worker --master-host=127.0.0.1
需要后台运行的场景可追加后台运行参数,示例:nohup locust -f 你的压测脚本.py --worker --master-host=127.0.0.1 > worker1.log 2>&1 &
重复执行多次即可启动多个worker,所有worker会自动连接到本地master节点,无需额外配置。 - 验证集群状态:打开Locust Web UI,右下角会显示当前已连接的worker数量,和你启动的数量一致即可正常启动压测任务。
一键自动化启动脚本
如果需要固定数量的worker,可编写shell脚本实现一键启动整个集群,以下是启动1个master+8个worker的脚本示例:
#!/bin/bash # 启动master进程 nohup locust -f 你的压测脚本.py --master --web-host 0.0.0.0 > master.log 2>&1 & echo "master进程启动完成" # 批量启动8个worker进程 for i in {1..8} do nohup locust -f 你的压测脚本.py --worker --master-host=127.0.0.1 > worker_${i}.log 2>&1 & echo "worker${i}进程启动完成" done
给脚本授予执行权限chmod +x start_locust.sh后,直接运行脚本即可完成整个集群的启动,无需任何额外操作。
大流量扩容替代方案
如果后续单EC2性能无法满足压测需求,不需要手动创建多台EC2逐个登录操作,可使用EC2 Fleet配合用户数据(User Data)配置,创建实例时直接将worker启动命令写入用户数据,实例启动后会自动连接到指定的master节点,比旧的Elastic Beanstalk方案灵活度更高,也不存在过时依赖问题。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

