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

相关推荐
huaqianzkh8 分钟前
WinForm C#:循环修改控件UI闪烁卡顿?SuspendLayout / ResumeLayout 与 BeginUpdate 优化
开发语言·ui·c#
杨凯凡12 分钟前
Spring Boot 链路追踪实战:Micrometer、TraceId 与异步线程上下文传播
java·spring boot·后端
计算机毕设定制辅导-无忧学长28 分钟前
《基于Spring Boot的迷游哈游戏综合服务平台的开发》
java·vue.js·spring boot·mysql·迷游哈游戏综合服务平台
非优秀程序员10 小时前
第04章 邮箱大战,163 与 QQ 的暗战|《互联网产品恩仇录》
java·vue.js·架构
知已难寻10 小时前
Docker 入门:容器技术与 Docker 基础
java·运维·服务器·docker·云原生·容器
沐晓时光10 小时前
C语言入门,内存函数知识讲解
c语言·开发语言
文丑颜不良啊12 小时前
LeetCode2481~2500题目解析
java·leetcode
Flynn Liang13 小时前
同一需求三套写法:用 Spring AI、LangChain4j、AgentScope Java 各实现一个带工具调用的 RAG 助手(实战对比)
java·人工智能·大模型·架构设计·spring ai·langchain4j·agentscope
聪明的笨猪猪14 小时前
实际工程问题:AI 生成 Spring Cache(@Cacheable / @CachePut / @CacheEvict)缓存注解踩坑
java·经验分享·面试·ai编程
愿有所息14 小时前
记一次 ARM64 + JDK8 上 fastjson2 的诡异数据错乱
java