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

负载均衡故障切换致临时500错误后Locust停滞问题咨询

是否为Locust bug

该现象不是Locust的原生bug,根本原因是HttpUser底层依赖的requests会话默认启用了连接池复用长连接,负载均衡故障切换时,连接池中缓存的旧长连接已经失效,requests没有主动清理这些无效连接,后续所有请求都尝试复用这些失效连接导致阻塞,最终表现为Locust监控停滞。

  • 你观察到的响应时间图表停止更新、RPS呈平直线都是用户请求全部阻塞的表现,重启测试后会话重建,连接池重新初始化就能恢复正常。
  • 你之前使用的RescheduleTaskImmediately仅会中断当前任务并立刻调度下一个任务,不会销毁现有用户实例,也不会重建内部的requests会话,因此无法解决连接池失效的问题。
主动销毁重建用户的实现方案

要主动销毁当前用户并让Locust自动启动新用户补充,直接调用HttpUser内置的stop()方法即可,该方法会触发on_stop钩子完成用户清理,旧的连接池会跟着实例一起销毁,新启动的用户会创建全新的requests会话,自动使用新的可用连接。

修改后的代码示例
#!/usr/bin/env python
import time
import random
from locust import HttpUser, task, between

URL_LIST = [
"/url1",
"/url2",
"/url3",
]

class QuickstartTask(HttpUser):
    wait_time = between(0.1, 0.5)
    connection_timeout = 15.0
    network_timeout = 20.0

    def on_start(self):
        # Required to use the http_proxy & https_proxy
        self.client.trust_env = True
        print("New user started")
        self.client.timeout = 5
        # 可选配置:禁用长连接,完全避免连接池复用导致的阻塞问题
        # self.client.keep_alive = False
        self.client.get("/")
        self.client.get("/favicon.ico")
        self.getcount = 0

    def on_stop(self):
        print("User stopped")

    @task
    def track_and_trace(self):
        url = URL_LIST[random.randrange(0,len(URL_LIST))]
        # 开启响应捕获,判断请求状态
        with self.client.get(url, name=url[:50], catch_response=True) as resp:
            # 服务端错误、请求超时都触发用户销毁
            if resp.status_code >= 500 or resp.error:
                print(f"请求异常,状态码:{resp.status_code},错误信息:{resp.error},主动销毁当前用户")
                self.stop()
        self.getcount += 1
        if self.getcount > 50 and (random.randrange(0,1000) > 990 or self.getcount > 200):
            print(f'完成{self.getcount}次请求,销毁当前用户重建')
            self.client.cookies.clear()
            self.getcount = 0
            # 替换原有RescheduleTaskImmediately,销毁用户重建
            self.stop()
额外优化建议

如果测试场景不需要复用长连接,可以在on_start方法中添加self.client.keep_alive = False配置,每次请求都会新建连接,无需等待用户销毁就能自动适配负载均衡切换后的新节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:00:02