如何用JMeter实现每分钟100用户、持续1小时的网站压测?
问题分析与解决方案
核心问题根源
当前配置Number of threads=6000、Ramp.up period=3600s的逻辑是让JMeter在1小时内尽可能均匀启动6000个线程,但这只是近似均匀,并非绝对精准的每分钟100个。另外,若单个用户的请求执行时长(从线程启动到请求完成的总耗时)短于1分钟,会导致同一分钟内有更多线程完成请求,被误判为“超量访问”;加上JMeter线程调度的微小波动,就会出现部分时段实际访问用户数超出要求的情况。
精准控制每分钟100用户的可行方案
方案1:线程组+定时器组合(无需插件,推荐)
放弃大线程数+长Ramp-up的思路,改用固定线程数循环+延迟的方式精准控制:
- 设置
Number of threads=100,Ramp-up period=60s(1分钟内启动100个线程) - 设置
Loop Count=60(循环60次,覆盖1小时测试时长) - 添加
Constant Timer,配置Thread Delay (in milliseconds)=60000(每个线程完成一次请求后,等待60秒再发起下一次)
注意:如果你的请求本身执行时长较长,需要将定时器延迟时间调整为
60000 - 请求平均执行时长(毫秒),确保请求执行时长+延迟时间=60秒,这样就能保证每分钟恰好产生100个新用户访问。
方案2:使用Arrivals Thread Group(精准速率控制)
JMeter的Arrivals Thread Group(需通过JMeter插件管理器安装)可以直接按“每分钟X个用户”的速率生成请求,完全匹配你的需求:
- 选择
Arrivals Thread Group - 设置
Target Rate (arrivals/min)=100 - 设置
Ramp-up Time (minutes)=1(可选,平滑过渡到目标速率,避免瞬间压力) - 设置
Duration (minutes)=60(测试持续1小时) - 设置
Max Threads为足够大的值(比如200,防止因请求耗时过长导致线程不足)
这个组件会严格按照设定速率触发用户请求,彻底解决速率波动问题。
方案3:原线程组补充吞吐量定时器
如果坚持使用原线程组配置,可添加Constant Throughput Timer强制限制请求速率:
- 添加
Constant Throughput Timer - 设置
Target throughput (in samples per minute)=100 - 选择
Calculate throughput based on为All active threads (shared)
该定时器会通过延迟线程执行的方式,将整体请求速率控制在每分钟100次,抵消线程启动波动带来的影响。
JMeter用户管理逻辑说明
- 每个线程对应一个虚拟用户,线程启动后立即执行请求,完成设定的Loop次数后停止。
- 单用户平均访问时长=线程启动到请求执行完成的总耗时,包含请求发送、服务器响应、本地处理等所有环节的时间。
- Ramp-up period的作用是控制线程启动间隔,理论间隔为
Ramp-up时间/线程数,但实际受JMeter调度精度、系统资源影响,无法做到绝对均匀。
内容的提问来源于stack exchange,提问作者Arden Savas
相关产品推荐
相关产品推荐

