如果jMeter的Controller抛出StackOverflowError

时间:2016-12-23 09:56:42

标签: jmeter threadgroup

我正在使用jMeter来加载我的系统。 我有两个线程组。第一个应该注入大约1M个事件,而第二个模拟对UI的请求。

我需要第二个线程组继续向UI发送请求,直到第一个完成注入1M事件。

我找到了this解决方案,并按如下方式实施:

  1. 在第一个线程组中,我使用以下代码添加了BeanShell PreProcessor:

      

    props.put(“DONE”,“FALSE”);

  2. 仍然在第一个线程组中,我使用以下代码添加了BeanShell PostProcessor:

      

    int activeThreadCount =   org.apache.jmeter.threads.JMeterContextService.getNumberOfThreads();

    if (activeThreadCount <= 1)
    {
    props.put("DONE", "TRUE");
    }
    
  3. 在第二个线程组中,我添加了一个具有以下条件的If Controller:

      

    $ {__ BeanShell(props.get(“DONE”)!= null&amp;&amp;   props.get( “DONE”)== “TRUE”)}

  4. 此解决方案无效,我在测试结束时看到以下错误:

      

    2016/12/22 20:52:30错误 - jmeter.threads.JMeterThread:测试失败!   java.lang.StackOverflowError,java.lang.String.valueOf(未知   来自)java.lang.StringBuilder.append(未知来源)at   org.apache.jmeter.engine.util.CompoundVariable.execute(CompoundVariable.java:152)     在   org.apache.jmeter.engine.util.CompoundVariable.execute(CompoundVariable.java:117)     在   org.apache.jmeter.testelement.property.FunctionProperty.getStringValue(FunctionProperty.java:101)     在   org.apache.jmeter.testelement.AbstractTestElement.getPropertyAsString(AbstractTestElement.java:271)     在   org.apache.jmeter.control.IfController.getCondition(IfController.java:177)     在org.apache.jmeter.control.IfController.next(IfController.java:240)     在   org.apache.jmeter.control.GenericController.nextIsAController(GenericController.java:222)     在   org.apache.jmeter.control.GenericController.next(GenericController.java:176)     在   org.apache.jmeter.control.LoopController.next(LoopController.java:123)     在   org.apache.jmeter.control.GenericController.nextIsAController(GenericController.java:225)     在   org.apache.jmeter.control.GenericController.next(GenericController.java:176)     在   org.apache.jmeter.control.LoopController.next(LoopController.java:123)     在   org.apache.jmeter.control.LoopController.nextIsNull(LoopController.java:151)     在   org.apache.jmeter.control.GenericController.next(GenericController.java:171)     在   org.apache.jmeter.control.LoopController.next(LoopController.java:123)

         

    ...

         

    ...

         

    ...

         

    (如上所述继续约1000行)

    任何人都可以告诉我这个错误的来源是什么? 我可以简单地忽略它吗? 它看起来像是一个没有任何停止条件的递归操作。

    由于 盖伊H

1 个答案:

答案 0 :(得分:1)

如果If Controller是LoopController的唯一子级,并且在启动时为false,则这可能是JMeter <2.12中的旧错误。

JMeter的最新版本中有一些修复程序:

尝试使用新版本的JMeter

解决方法是添加一个Test Action(从5.0起重命名为Flow Control Action),并将其设为pause = 0作为循环控制器的第一个子代