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

Concurrency Thread Group分布式模式压测时长不符问题咨询

问题分析与解决方案

一、为什么实际每分钟新增75用户?

核心问题是分布式模式下吞吐量控制的作用范围理解偏差:

  • 你设置的恒定吞吐量50请求/分钟,如果使用Constant Throughput Timer且未开启分布式全局控制,该阈值是单节点独立生效,而非集群总吞吐量。若每台从机都按此阈值执行,总吞吐量会远超预期(比如单节点实际跑15请求/分钟,5台合计就是75)。
  • 另外你提到的"应耗时40分钟"计算有误:总请求数1500,按50请求/分钟的速率,理论耗时应为1500/50=30分钟,而非40分钟。

二、配置调整方案(匹配核心需求)

你的目标是逐步加压到系统崩溃,记录最大并发登录用户数,单迭代,系统无法处理即停止,按以下步骤调整:

1. 修正加压逻辑(实现匀速新增用户)

放弃恒定吞吐量配置,改用Concurrency Thread Group的梯度加压模式更直接:

  • 设置Initial Concurrency为0,Target Concurrency为1500,Ramp Up Time设为1800秒(30分钟),这样会线性增加并发用户,每分钟新增50个(1500/30=50),完全匹配预期节奏。
  • 若坚持用恒定吞吐量,需在Constant Throughput Timer中开启Distributed Mode,并将Calculate Throughput as设为Total across all threads (distributed),这样50请求/分钟是集群总吞吐量,各从机会自动分摊请求量。

2. 实现系统崩溃时自动停止测试

  • 添加Response Assertion:检查登录请求的响应状态码(比如必须为200)、响应时间(比如超过5秒判定为卡顿)。
  • 添加If Controller,条件设为${__jexl3(${JMeterThread.last_sample_ok} == false,)},当断言失败时,执行Test Action Sampler,在其中调用${__jmeter.engine.stop()}停止整个测试。
  • 同时在Concurrency Thread Group中勾选Stop Thread on Error,确保单个请求失败时立即终止对应线程,避免无效请求占用资源。

3. 分布式凭证配置验证

  • 确保5台从机的300个登录凭证完全唯一,无重复账号。每台从机用独立的CSV文件(如slave_1.csv至slave_5.csv)存储凭证,通过CSV Data Set Config加载,避免同一账号多次登录导致的测试数据失真。

三、关键细节提醒

  • 迭代次数设为1是正确的,但要注意:若需统计并发登录用户数,必须维持用户会话活跃。添加HTTP Cookie Manager保存登录会话,或者在登录后定期发送轻量请求(如获取用户基本信息),防止会话超时断开。
  • 分布式测试时,主机仅负责调度,不执行测试任务,5台从机各跑300线程,总计1500线程,完全覆盖最大用户数需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 03:16:09