JMeter线程组设为无限循环时报StackOverflowError问题求助
问题1 栈溢出&线程不重启排查解决
该报错确实和你的while循环配置直接相关,核心原因有两个:
- 变量未重置:你在用户自定义变量里初始化的
isLast变量,仅会在线程组首次启动时赋值一次。当第一次分页逻辑跑完isLast被设为true退出while循环后,线程组进入下一轮无限循环时,isLast仍然是true,while循环直接跳过,控制器调用链进入空循环递归调用,最终触发栈溢出。 - while条件写法性能问题:你用
__groovy函数作为循环判断条件,每次判断都会重新编译执行groovy脚本,高频率调用下会持续占用栈内存,加速栈溢出触发。
解决步骤:
- 在simple controller的最上方,新增一个JSR223前置处理器,每次线程组循环开始时重置变量:
vars.put("isLast", "false"); vars.put("pageNum", "1"); // 你的页码变量同步重置
- 替换while循环条件为性能更优的jexl3写法:
${__jexl3("${isLast}" == "false",)} - 检查所有JSR223元件,勾选「Cache compiled script if available」选项,避免每次执行重复编译脚本。
问题2 线程生命周期配置不生效排查解决
排查解决逻辑:
- 先确认线程组配置页的「调度器」复选框是否勾选,仅配置时长、延迟参数但不勾选调度器,配置不会生效。
- JMeter GUI的示意图(预览图)默认仅读取线程数、ramp-up时间、循环次数参数生成预览,不会加载调度器的时间配置,属于正常逻辑。调度器配置仅在实际运行测试(无论GUI/非GUI模式)时生效。
- 如果你使用的是JMeter 5.4.1版本,存在GUI调度器配置预览的已知bug,可升级到5.5及以上版本解决预览显示问题。
内容的提问来源于stack exchange,提问作者Grigoris
相关产品推荐
相关产品推荐

