You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在性能测试中为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 ReportAggregate Report组件,运行测试后查看目标交易的Throughput指标:

  • 如果吞吐量偏低,检查是否有线程提前结束,或定时器配置的时间单位错误
  • 如果吞吐量波动大,调整Precise Throughput Timer的Throughput Shaping选项(比如选择Evenly均匀分配请求)

内容的提问来源于stack exchange,提问作者Automation_learner

火山引擎 最新活动