如何在性能测试中为1000并发用户的指定交易实现65次/小时的目标吞吐量?
我来帮你拆解这两个问题,一步步给出实用的解决方案:
一、理论层面:1小时内1000并发用户实现65次/小时吞吐量的思路
首先得明确:65次/小时的总吞吐量意味着平均每55秒左右才会产生1次目标交易请求,而1000并发用户大部分时间会处于空闲等待状态——这是正常的,因为吞吐量和并发数本身没有必然的正比关系,低吞吐量高并发的场景就是要让大量用户保持在线,但仅按极低频率触发目标操作。
核心实现逻辑是:
- 控制目标交易的请求触发频率,确保1小时内总请求数稳定在65次
- 将这些请求均匀分散到1000个并发线程中,避免集中触发导致的负载波动
具体可以通过吞吐量控制类定时器(比如你用到的Precise Throughput Timer)来实现,本质是让定时器根据总吞吐量目标,自动计算每个线程的请求间隔,分配触发时机。
二、实际问题:Precise Throughput Timer未达预期的排查与解决
针对你用Precise Throughput Timer没达到65次/小时的情况,按以下步骤排查和调整:
1. 确认定时器的作用范围
Precise Throughput Timer的作用范围是其下的所有子组件,所以必须确保它仅包裹目标交易,而不是挂在线程组根节点(否则会作用于4个交易,导致吞吐量被分摊)。
正确的结构应该是:
线程组(1000并发,持续80分钟) ├─ 其他交易1 ├─ 其他交易2 ├─ 其他交易3 └─ Precise Throughput Timer └─ 目标交易
2. 检查吞吐量的计算基准
在Precise Throughput Timer的配置中,Calculate Throughput based on选项是关键:
- 如果你的65次/小时是目标交易的总吞吐量,必须选择
all active threads in current thread group(所有活跃线程) - 不要选
this thread only(单线程),否则每个线程都会按65次/小时发送请求,总吞吐量会变成1000*65=65000次/小时,完全超出预期
3. 正确设置吞吐量参数
注意JMeter版本的差异:
- 若使用JMeter 5.0+,Precise Throughput Timer支持直接设置时间单位:选择
Hour,然后填入65即可 - 若版本较低,需要转换为分钟单位:65/60≈1.083,填入
Target Throughput (in samples per minute)中
4. 确保线程组持续运行
你的线程组配置是1000并发、持续1小时20分钟,必须:
- 将
Loop Count设为Forever(无限循环) - 在
Duration (seconds)中填入4800(80分钟*60秒) - 不要用
Number of Threads+Ramp-Up+Loop Count的组合,否则线程可能提前结束,导致吞吐量未达标
5. 排除其他交易的干扰
如果另外3个交易的请求频率较高,可能会占用线程的执行时间,导致目标交易的定时器无法按预期触发。可以:
- 用
Parallel Controller将4个交易并行执行,确保目标交易的定时器不受其他交易的执行时长影响 - 或给其他交易添加
Constant Timer/Uniform Random Timer控制其请求频率,避免抢占线程资源
6. 验证与调优
添加Summary Report或Aggregate Report组件,运行测试后查看目标交易的Throughput指标:
- 如果吞吐量偏低,检查是否有线程提前结束,或定时器配置的时间单位错误
- 如果吞吐量波动大,调整Precise Throughput Timer的
Throughput Shaping选项(比如选择Evenly均匀分配请求)
内容的提问来源于stack exchange,提问作者Automation_learner




