如何调整JMeter重复请求配置,实现1000已登录用户中每秒仅50人访问子页面?
解决JMeter中1000已登录用户每秒仅50次请求的配置方案
听起来你现在遇到的核心问题是,1000个用户登录后同时触发子页面请求,直接把数据库CPU拉满了。要实现每秒仅50次请求的精准控制,我们可以利用JMeter的吞吐量调度组件来平滑请求节奏,具体方案如下:
方案一:使用Constant Throughput Timer(固定吞吐量定时器)
这是JMeter自带的经典组件,能稳定把请求速率控制在目标值:
- 先移除原来的
Constant Timer(避免和吞吐量定时器的间隔逻辑冲突) - 在你的
Loop Controller内部、子页面请求的上方添加Constant Throughput Timer - 配置关键参数:
- 吞吐量:输入
3000(因为每秒50次,换算成分钟就是50*60=3000次/分钟) - Calculate throughput based on:选择
All active threads in current thread group。这个选项会让JMeter自动分摊1000个已登录线程的请求频率,确保整体每秒只有50次请求打到数据库。
- 吞吐量:输入
方案二:使用Precise Throughput Timer(精准吞吐量定时器)
如果需要更严格的每秒请求数控制,这个组件比Constant版本的精度更高:
- 同样在
Loop Controller内添加Precise Throughput Timer - 配置关键参数:
- Target throughput:输入
50 - Units:选择
per second - Throughput shaping:保持默认的
Evenly distributed即可,它会均匀调度1000个线程,每秒精准触发50次请求。
- Target throughput:输入
额外注意事项
- 登录阶段的同步:确保1000个用户都完成登录后再进入循环请求。如果你的登录是顺序启动的(比如
Ramp-Up Period设为1000秒,每秒启动1个线程),等所有线程登录完成后再开始循环即可;如果是批量启动,建议在登录请求后添加Synchronizing Timer,设置Number of Simulated Users to Group By为1000,让所有线程登录完成后统一进入循环阶段。 - Loop Controller的设置:保留
Loop Controller让用户定期调用子页面即可,不需要再设置固定间隔——吞吐量定时器会自动根据目标速率调整每个线程的请求间隔(1000个线程每秒50次的话,平均每个线程每20秒发起一次请求,既满足定期调用需求,又避免了并发冲击)。
这样调整后,数据库的请求压力会被平滑控制在每秒50次,CPU负载应该就能回到合理范围了。
内容的提问来源于stack exchange,提问作者Robot Taekwon V
相关产品推荐
相关产品推荐

