JMeter测试完成后采样器请求总数未达预期数值问题咨询
问题根因
核心问题是定时器配置错误,直接拉低了实际请求吞吐量:
- 你在单个请求下配置了等待时长60000毫秒的
Constant Timer,该组件的规则是作用域内的采样器每次执行前,都会强制等待设定的时长。按这个配置计算,单线程每小时最多只能发起60次请求,最终统计到30000个样本,刚好对应500个线程跑满1小时的请求量,和你错误配置的等待逻辑完全吻合,直接抵消了Constant Throughput Timer的吞吐量控制效果。 - 除此之外还有三个常见诱因会导致样本量不达标:
- CSV Data Set Config配置错误:如果CSV文件内的参数条目数不足,且设置了
Stop thread on EOF = True,参数读完后线程会直接终止,无法跑到预设的测试时长 - Constant Throughput Timer作用域错误:如果只挂载在单个请求下,无法全局控制所有接口的总吞吐量,会出现实际吞吐量远低于目标值的问题
- 线程组配置错误:如果线程数不足、调度器持续时长设置错误、循环次数配置不够,也会导致总样本量达不到预期
- CSV Data Set Config配置错误:如果CSV文件内的参数条目数不足,且设置了
排查步骤
- 定位60000毫秒固定定时器的挂载位置:如果是作为单个HTTP请求的子节点存在,即可确认是核心故障点
- 核对线程组配置:确认调度器持续时长是否设置为3600秒(60分钟),是否设置了过低的循环次数、过短的测试时长
- 核对CSV Data Set Config配置:统计CSV文件内的有效参数条目数,检查
Recycle on EOF、Stop thread on EOF两个开关的配置是否符合长压测要求 - 核对Constant Throughput Timer配置:确认目标吞吐量单位为每分钟请求数,挂载位置是否为线程组级别,计算范围是否为所有活跃线程的总吞吐量
解决方案
- 移除错误配置的60000毫秒固定定时器
你配置该定时器的原始需求是每分钟变更一次上传文件名,而非每个请求间隔1分钟,不要用固定定时器实现该逻辑。按分钟生成文件名可以选两种更简单可靠的方案:- 无需CSV的方案:直接在文件名参数处使用
${__time(yyyyMMddHHmm,)}函数生成按分钟滚动的时间戳作为文件名,自动实现每分钟文件名变更,无额外维护成本 - 必须使用CSV的方案:设置
Recycle on EOF = True、Stop thread on EOF = False,通过整分钟判断逻辑触发读取下一行CSV参数即可
- 无需CSV的方案:直接在文件名参数处使用
- 调整Constant Throughput Timer配置
将定时器移动到线程组的直接子节点,覆盖所有采样器,目标吞吐量填2000,计算范围选择All active threads,保证全局总吞吐量稳定在每分钟2000次 - 修正线程组配置
按目标吞吐量配置足够的线程数:单线程每分钟通常可处理30-60个HTTP请求,要达到每分钟2000次的目标,建议配置40-60个线程,Ramp-Up时间设为10-20秒,调度器持续时长设为3600秒,取消固定循环次数限制,避免提前终止 - 校验CSV配置
若使用CSV存储上传文件名,确保参数条目数满足测试需求,开启参数回收、关闭读参终止线程的开关,避免因为参数耗尽导致测试提前结束
内容的提问来源于stack exchange,提问作者Tristan
相关产品推荐
相关产品推荐

