JMeter实现150请求/分钟持续20分钟负载测试的问题咨询
用JMeter实现精准150请求/分钟、持续20分钟的负载测试
完全可以用JMeter实现该需求,无需更换Locust。先分析你之前三种方法的问题,再给出正确方案:
你之前方法的问题
- 方法1:设置3000线程+1200秒Ramp-up的思路错误。这种方式是让JMeter逐步启动3000个线程,每个线程执行一次请求,线程是重量级资源,启动数千个必然触发OutOfMemoryError。而且这种方式无法保证恒定速率,线程启动后会立即发请求,速率会大幅波动。
- 方法2:并发线程组是控制并发数而非请求速率。150并发意味着同时有150个线程在运行,若每个请求耗时1秒,每分钟请求数会达到9000,远超过150的要求,样本数自然会超3000。
- 方法3:Precision Timer可以用来控制请求间隔,但需要结合线程数和请求耗时,配置不当会导致速率不达标。
正确实现方案:Constant Throughput Timer(恒定吞吐量定时器)
这是JMeter专门用于控制请求速率的组件,步骤如下:
- 线程组配置:
- 线程数设为50(足够支撑150req/min的速率,避免线程不足拖慢速率)
- 循环次数设为
永远 - Ramp-up时间设为10秒(快速启动所有线程)
- 添加Constant Throughput Timer:
- 将
Target throughput (in samples per minute)设为150 Calculate throughput based on选择All active threads (shared),让JMeter控制所有线程的总请求速率稳定在150/分钟
- 将
- 添加Duration Timer(持续时间定时器):
- 设置持续时间为1200秒(即20分钟),到时间后自动终止测试
Precision Timer的正确用法(备选)
若想用Precision Timer实现,需计算请求间隔:150req/min = 每4秒1个请求(60÷150=4)。配置如下:
- 在Precision Timer中设置
Delay为4000毫秒 - 线程组循环次数设为
永远,搭配Duration Timer控制20分钟时长 - 注意:这种方式依赖线程数,若单个请求耗时超过4秒,会导致速率无法达标,因此Constant Throughput Timer是更可靠的选择
OutOfMemoryError的解决
若仍遇内存问题:
- 修改JMeter启动脚本(
jmeter.bat或jmeter.sh)中的JVM参数,例如将-Xms1g -Xmx2g调整为-Xms2g -Xmx4g,增大堆内存 - 测试期间关闭不必要的监听器(如「查看结果树」),减少内存消耗
内容的提问来源于stack exchange,提问作者mahender
相关产品推荐
相关产品推荐

