2017-10-06 21 views
0

나는 일본의 @의 GC의 궁극적 인 그룹 스레드와 스레드 그룹 내에서 내가 컨트롤러를 확인하는 경우는 다른 모든 스레드/사용자가있는 것으로 보인다JMeter를 스레드 그룹의 컨트롤러는

(${__threadNum}%2==0) 

계속이 사용하고있는 경우 어떤 문제는 스레드를 닫는 것이지만,로드가 설정된 시간 동안 유지 된 후에 컨트롤러에 스레드가있는만큼 많은 오류가 발생하기 때문입니다. 나는 그들이 무엇에 관한 것인지 확신 할 수 없다. 내부의 모든 것을 비활성화 한 후에도 그것들을 얻게되기 때문에 if 컨트롤러의 내용에 대해 보이지 않는다.

나는 Windows 10에서 궁극적 인 스레드 그룹 2.1을 사용하는 jMeter 3.2를 사용하고 있습니다.

오류 메시지 :

java.lang.StackOverflowError: null 
at java.lang.invoke.MethodHandles.insertArguments(Unknown Source) ~[?:1.8.0_131] 
at jdk.internal.dynalink.DynamicLinker.createRelinkAndInvokeMethod(DynamicLinker.java:224) ~[nashorn.jar:?] 
at jdk.internal.dynalink.DynamicLinker.link(DynamicLinker.java:201) ~[nashorn.jar:?] 
at jdk.nashorn.internal.runtime.linker.Bootstrap.bootstrap(Bootstrap.java:208) ~[nashorn.jar:?] 
at jdk.nashorn.internal.runtime.linker.Bootstrap.createDynamicInvoker(Bootstrap.java:371) ~[nashorn.jar:?] 
at jdk.nashorn.internal.runtime.linker.Bootstrap.createDynamicInvoker(Bootstrap.java:345) ~[nashorn.jar:?] 
at jdk.nashorn.internal.runtime.linker.InvokeByName.<init>(InvokeByName.java:86) ~[nashorn.jar:?] 
at jdk.nashorn.internal.runtime.linker.InvokeByName.<init>(InvokeByName.java:73) ~[nashorn.jar:?] 
at jdk.nashorn.internal.objects.Global.<init>(Global.java:96) ~[nashorn.jar:?] 
at jdk.nashorn.internal.runtime.Context.newGlobal(Context.java:1111) ~[nashorn.jar:?] 
at jdk.nashorn.api.scripting.NashornScriptEngine$2.run(NashornScriptEngine.java:350) ~[nashorn.jar:?] 
at jdk.nashorn.api.scripting.NashornScriptEngine$2.run(NashornScriptEngine.java:346) ~[nashorn.jar:?] 
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_131] 
at jdk.nashorn.api.scripting.NashornScriptEngine.createNashornGlobal(NashornScriptEngine.java:346) ~[nashorn.jar:?] 
at jdk.nashorn.api.scripting.NashornScriptEngine.createGlobalMirror(NashornScriptEngine.java:340) ~[nashorn.jar:?] 
at jdk.nashorn.api.scripting.NashornScriptEngine.createBindings(NashornScriptEngine.java:170) ~[nashorn.jar:?] 
at org.apache.jmeter.control.IfController$NashornJsEngine.evaluate(IfController.java:123) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.IfController.evaluateCondition(IfController.java:185) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.IfController.next(IfController.java:239) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.GenericController.nextIsAController(GenericController.java:219) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.GenericController.next(GenericController.java:173) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.LoopController.next(LoopController.java:123) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.LoopController.nextIsNull(LoopController.java:151) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.GenericController.next(GenericController.java:168) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.LoopController.next(LoopController.java:123) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.GenericController.nextIsAController(GenericController.java:222) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.GenericController.next(GenericController.java:173) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.LoopController.next(LoopController.java:123) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.LoopController.nextIsNull(LoopController.java:151) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.GenericController.next(GenericController.java:168) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.LoopController.next(LoopController.java:123) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at... etc etc 

편집 : 지금은이를 포기하고있어 그 오류를 제공하지 않기 때문에 그냥 바닐라 스레드 그룹을 사용하십시오.

답변

0

등 JMeter를 테스트, 벤치 마크, 우수 사례의 맥락에서 그루비 스크립트에 대한 자세한 내용은 Apache Groovy - Why and How You Should Use It 기사를 참조하십시오 새로운 전화. 이 논리 대신에 스레드의 절반 만 만들어지고 그 수는 대신 2로 곱 해져서 같은 효과를냅니다. 이로써 모든 유형의 스레드 그룹이 작동하게되었습니다.

2

궁극적 인 플러그인이있는 issue이 있으며 controller.you가 JSR 223 요소에서이를 확인할 수 있고 If controller의 부울 결과 만 검사 할 수 있습니다. 예 : vars.putObject("myBoolean", isTrue);을 저장하고 ${myBoolean}을 조건으로 확인하십시오.

편집

더 나은 솔루션, 당신은 컨트롤러 ${even} 경우에 확인하고 그 이전의 어떤 양식 JMeter 3.1 it is recommended to use JSR223 Test Elements and __groovy function 때문에 문자열

로 /도 = 사실
if (ctx.getThreadNum() % 2 == 0) { 
    vars.putObject("even", "true"); 
    log.info("even true"); 
} else { 
    vars.putObject("even", "false"); 
     log.info("even false"); 
} 
+0

아, 알겠습니다. 답장을 보내 주셔서 감사합니다! – tjarles

+0

이것은 이전과 같은 결과를 제공합니다. 뭔가 다른 것이 틀림 없습니다. – tjarles

+0

물론입니다. 이것은 문제를 일으키는 스레드 그룹 일 뿐이며 모든 서버와 IP 주소는 제거되어 작동하지 않습니다. https://expirebox.com/download/682e753f241cb4bf12df3e7e6253abd3.html – tjarles

2

을 거짓 정의와 JSR223 요소를 사용할 수 있습니다 JMeter에서 스크립팅하기 때문에 JavaScript에서 Groovy로 전환하고 컨트롤러의 "조건"영역에서 __groovy() function을 사용하는 것이 좋습니다.

${__groovy(ctx.getThreadNum() %2 == 0,)} 

내가 다른 모든 사용자/스레드가을 가진의 경우 컨트롤러를 제거하여 내 문제를 해결

+0

답장을 보내 주셔서 감사합니다. 나는 이것을 대신 시도 할 것이다. – tjarles

+0

이것은 이전과 같은 결과를 제공합니다. 뭔가 다른 것이 틀림 없습니다. – tjarles