Jmeter Transaction Controller(事务控制器) 的 TPS(每秒事务数)严格固定为 1

在 JMeter 中,要将某个 Transaction Controller(事务控制器) 的 TPS(每秒事务数)严格固定为 1,最干净、最常用的方法是结合使用 Constant Throughput Timer(常数吞吐量定时器)Precise Throughput Timer(精准吞吐量定时器)

这里有几种主流的操作方案,你可以根据需求选择:


方案一:使用 Constant Throughput Timer(最简单)

这是 JMeter 自带的经典组件,适合负载比较稳定的场景。

操作步骤:

  1. 结构设置 :右键点击你的 Transaction Controller -> Add (添加) -> Timer (定时器) -> Constant Throughput Timer

    • 注意:务必把它放在 Transaction Controller 内部,这样它只对这个事务控制器生效。
  2. 参数配置

    • Target throughput (in samples per minute) :填写 60.0。(因为它是按分钟计算的,1 \\text{ TPS} \\times 60 \\text{秒} = 60)。

    • Calculate Throughput based on :选择 this thread-only(仅针对当前线程)或 all active threads(所有活跃线程)。通常建议选择 all active threads,这样无论你开多少个线程,总 TPS 都会被压在 1。

⚠️ 避坑提示 :JMeter 的定时器只能延迟 请求,不能加速 请求。如果你的外层线程池(Thread Group)只开了 1 个线程,而这个 Transaction 内部所有请求总耗时超过了 1 秒(比如压测服务器响应太慢),那么即便你设了 60,实际 TPS 也达不到 1。所以线程组的并发线程数一定要配得稍微充裕一点(比如 3~5 个线程)。


方案二:使用 Precise Throughput Timer(更精准)

如果你希望吞吐量极其精准,或者在配合同步定时器时表现更稳定,推荐用这个。

操作步骤:

  1. 右键点击 Transaction Controller -> Add (添加) -> Timer (定时器) -> Precise Throughput Timer

  2. 参数配置

    • Target throughput (in samples per period) :填写 1.0

    • Throughput period (in seconds) :填写 1。(意思就是每 1 秒执行 1 次)。

    • Test duration (in seconds):填写你的总压测时间(比如 3600 秒)。


方案三:配合 Concurrency Thread Group + Throughput Shaping Timer(高阶推荐)

如果你需要长期压测,且希望 TPS 极其平滑地一条直线拉在 1,用 JMeter 官方的 Plugins 插件组合是最好的方案。

  1. 安装 Custom Thread GroupsThroughput Shaping Timer 插件。

  2. 线程组使用 bzm - Concurrency Thread Group

  3. 在线程组下添加 jp@gc - Throughput Shaping Timer

  4. 在 Timer 的表格里添加一行:Start RPS: 1, End RPS: 1, Duration: 你的压测时间

  5. 回到 Concurrency Thread Group,在 Feedback Loop(反馈环)中绑定这个 Timer。这样 JMeter 会根据实际 TPS 是不是 1,自动动态调整线程数。


💡 核心检查点(为什么我的 TPS 固定的不是 1?)

如果你配置完发现 TPS 还是不对,请检查 Transaction Controller 的这个勾选项:

  • Generate parent sample

    • 勾选(推荐) :整个控制器在结果中只算作 1 个 Sample。此时 Timer 控制的就是这个 Transaction 的 TPS。

    • 不勾选:控制器内部的每一个子请求都会单独算作 Sample。此时 Timer 控制的可能会变成内部子请求的 TPS,导致整个 Transaction 的 TPS 暴跌。

你目前压测的这个 Transaction Controller 内部包含了多少个请求?如果内部请求响应时间比较长,我可以帮你算一下线程组大概需要开多少并发。

相关推荐
hixiong12318 小时前
C# Tokenizers.DotNet测试工具
开发语言·人工智能·llm
曹牧18 小时前
Java:Deprecated 是
java·开发语言
用户9168422027419 小时前
Spring Boot application.yml 最全避坑与多环境配置
java·后端
kobe_t19 小时前
‌Spring AI
java
caimouse19 小时前
Reactos 第 4 章 对象管理 — 4.1 对象与对象目录
服务器·c语言·开发语言·windows·架构
半兽先生19 小时前
flv.js解决其中一个监控断线导致其他的监控播放阻塞
开发语言·javascript·ecmascript
小糯米60119 小时前
C语言 动态内存管理
c语言·开发语言
say_fall19 小时前
可编程中断控制器8259A工作方式超详细解析
android·开发语言·学习·硬件架构·硬件工程
骄马之死19 小时前
Spring 核心知识点(IOC + AOP + 事务)
java·后端·spring
San813_LDD19 小时前
[QT]《Qt 开发避坑指南:随机数、容器操作与 VS 环境配置》
开发语言·qt