如何在JMeter中固定TPS,不受线程数量影响?
如何在JMeter中维持固定总TPS(不受线程数影响)
要实现所有API总请求次数之和固定、TPS维持在200的目标,核心是利用JMeter的吞吐量控制组件,以下是具体实现步骤:
核心方案:使用Constant Throughput Timer
这个定时器可以强制控制所有线程的总请求吞吐量,不受线程数量变化影响。
- 给目标线程组添加定时器:右键线程组 → 添加 → 定时器 → Constant Throughput Timer
- 配置关键参数:
- Throughput:填入
12000(注意:默认单位是请求/分钟,200TPS需换算为200*60=12000) - Calculate throughput based on:选择
All active threads (shared),此选项会让定时器控制所有活跃线程的总吞吐量,而非单个线程的吞吐量,确保总TPS稳定在目标值
- Throughput:填入
- 线程组配套配置:
- 循环次数设为永远,避免线程提前终止
- 设置测试持续时间(如3600秒),控制压测时长
多API的请求分配(可选)
如果需要给5个API分配固定的TPS比例(比如各占20%,单API40TPS),可配合以下组件:
- 给每个API请求单独添加Constant Throughput Timer,设置对应吞吐量(如40TPS=2400请求/分钟),同时将每个定时器的
Calculate throughput based on设为Current thread,实现单API的TPS独立控制,总和维持200 - 或者使用Weighted Random Controller:将5个API放入该控制器,设置每个API的权重(权重相同则请求比例均等),再给整个线程组加总吞吐量定时器,实现总TPS固定、API按权重分配请求量
进阶方案:Precise Throughput Timer
如果需要更精准的TPS控制(避免短时间内请求突增),可以用Precise Throughput Timer:
- 添加方式:右键线程组 → 添加 → 定时器 → Precise Throughput Timer
- 配置:设置目标吞吐量为
200(单位为请求/秒),选择Total for all threads模式,它会更均匀地分配请求时间间隔,确保TPS稳定
注意事项
- 线程数要充足:线程数至少满足
线程数 = 目标TPS * 平均响应时间(秒),比如平均响应时间0.5秒,200TPS至少需要100个线程,否则线程不足会导致无法达到目标TPS - 关闭延迟线程创建:线程组的
Delay thread creation until needed建议关闭,确保所有线程提前初始化,避免影响吞吐量控制
内容的提问来源于stack exchange,提问作者GlidingSwords997
相关产品推荐
相关产品推荐

