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 内部包含了多少个请求?如果内部请求响应时间比较长,我可以帮你算一下线程组大概需要开多少并发。

相关推荐
名字还没想好☜6 小时前
Python f-string 进阶:数字格式化、对齐填充、调试 = 号与嵌套表达式
开发语言·数据库·python·字符串格式化·f-string
·薯条大王7 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
一壶浊酒..10 小时前
Scrape Webpack练习
开发语言·javascript·webpack
ZJH__GO10 小时前
网络编程v4pro--实现聊天室文件传输功能
java·服务器·网络·计算机网络
程序员黑豆10 小时前
Windows 系统 Java 环境变量配置全攻略:解决“不是内部或外部命令”
java·前端·ai编程
命运之光10 小时前
【C语言完整代码】就诊信息管理系统
java·c语言·开发语言
凤山老林10 小时前
Spring Boot @Async 线上实战:从默认配置到生产级线程池治理
java·spring boot·后端
命运之光11 小时前
【C语言完整代码】图书管理系统:图书馆场景下的增删改查实战
c语言·开发语言
猿长大人11 小时前
C# | Serilog 新手入门
开发语言·c#·.net·log
marvelyu11 小时前
每天10分钟学会OceanBase系列(Day 20):跨机房容灾实战——构建多数据中心高可用架构
java·大数据·数据库