JMeter StackOverflow

时间:2014-09-18 08:36:16

标签: jmeter

我正在使用JMeter 2.11。以下参数在jmeter.bat文件中定义:

set HEAP=-Xms512m -Xmx12144m

set PERM=-XX:PermSize=64m -XX:MaxPermSize=64m

我以50个用户的批处理模式运行我的场景。似乎有些线程在20分钟或1小时内被阻塞,之后再次运行。例如,我们在单元组6中有以下内容:

<httpSample t="13" lt="13" ts="1410856270124" s="true" lb="/hopex/service.aspx?data=generationType-standard|generator-E98AEA3A4F717715" rc="200" rm="OK" tn="Groupe d'unités 1-6" dt="text" by="412">
  <java.net.URL>http://172.16.1.23/hopex/service.aspx?data=generationType-standard|generator-E98AEA3A4F717715</java.net.URL>
</httpSample>

**executed at 16/09/2014 10:31:10**


<httpSample t="0" lt="0" ts="1410856270138" s="true" lb="/hopex/statesessionprovider.aspx" rc="200" rm="OK" tn="Groupe d'unités 1-6" dt="text" by="238">
  <java.net.URL>http://172.16.1.23/hopex/statesessionprovider.aspx</java.net.URL>
</httpSample>

**executed at 16/09/2014 10:31:10**



<sample t="0" lt="0" ts="1410856274818" s="true" lb="Timer between steps" rc="200" rm="OK" tn="Groupe d'unités 1-6" dt="text" by="1478"/>

**executed at 16/09/2014 10:31:15**


<httpSample t="3" lt="3" ts="1410860493293" s="false" lb="/Hopex/service.aspx?data=generationType-standard|generator-E98AEA3A4F717715" rc="500" rm="Internal Server Error" tn="Groupe d'unités 1-6" dt="text" by="298">
  <java.net.URL>http://172.16.1.23/Hopex/service.aspx?data=generationType-standard|generator-E98AEA3A4F717715</java.net.URL>
</httpSample>

**executed at 16/09/2014 11:41:33**

似乎定时器在10H31执行,下一个请求在11H41发送,也就是说在定时器之后的1H10。我们的服务器应用程序日志显示由于IIS而从未处理过上一个请求  Web应用程序会话超时。所以这意味着JMeter在发送请求之前暂停了一个多小时。应该注意的是,如果我们从我们的场景中删除JMeter while语句,它就可以工作。

我从JMeter日志中检索此信息。似乎问题来自JMeter堆栈溢出。

2014/09/16 10:30:49 WARN  - jmeter.control.GenericController: StackOverflowError detected 
2014/09/16 10:30:49 WARN  - jmeter.control.GenericController: StackOverflowError detected 
2014/09/16 10:30:49 WARN  - jmeter.control.GenericController: StackOverflowError detected 
2014/09/16 10:30:51 WARN  - jmeter.control.GenericController: StackOverflowError detected 
2014/09/16 10:31:00 INFO  - jmeter.reporters.Summariser: summary +    196 in    30s =    6.5/s Avg:   154 Min:     0 Max: 11347 Err:     0 (0.00%) Active: 50 Started: 50 Finished: 0 
2014/09/16 10:31:00 INFO  - jmeter.reporters.Summariser: summary =   5974 in  1103s =    5.4/s Avg:   406 Min:     0 Max: 47864 Err:     0 (0.00%) 
2014/09/16 10:31:01 WARN  - jmeter.control.GenericController: StackOverflowError detected 
2014/09/16 10:31:32 INFO  - jmeter.reporters.Summariser: summary +    154 in    32s =    4.9/s Avg:    94 Min:     0 Max: 10982 Err:     0 (0.00%) Active: 50 Started: 50 Finished: 0 
2014/09/16 10:31:32 INFO  - jmeter.reporters.Summariser: summary =   6128 in  1135s =    5.4/s Avg:   399 Min:     0 Max: 47864 Err:     0 (0.00%) 
2014/09/16 10:31:37 WARN  - jmeter.control.GenericController: StackOverflowError detected 

我尝试使用-XSS更改JMeter.bat参数但我们有副作用。我还使用这些参数运行测试:

set HEAP=-Xms512m -Xmx12144m 
set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m 
set SURVIVOR=-XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=50% 
set TENURING=-XX:MaxTenuringThreshold=2 
set RMIGC=-Dsun.rmi.dgc.client.gcInterval=600000 -Dsun.rmi.dgc.server.gcInterval=600000 
set PERM=-XX:PermSize=64m -XX:MaxPermSize=64m

没有任何变化,同样的问题也适用。 有没有人知道如何删除那些JMeter错误? 这对我们来说非常阻塞,因为这意味着JMeter无法同时正确处理50个用户......

此致

西尔维

4 个答案:

答案 0 :(得分:3)

问题是由于版本2.11中的已知错误:

  

如果控制器的条件在第一次迭代时始终为假,则监听器不会显示迭代计数(请参阅错误52496)。解决方法是在If Controller的同一级别(或更高级别)添加一个采样器。例如,具有0等待时间的测试操作采样器(不生成样本),或调试采样器,所有字段都设置为False(以减小样本大小)。

也打开:

此错误现已修复,因此将以2.12

的形式提供

答案 1 :(得分:0)

2014/09/16 10:31:37 WARN - jmeter.control.GenericController:检测到StackOverflowError

如果测试计划中存在逻辑错误,则会出现此错误。请仔细检查添加beanshell监听器,以便在测试计划中的逻辑控制器(例如循环/迭代控制器)中打印额外的日志。

答案 2 :(得分:0)

我相信在&#34;设置HEAP = -Xms512m -Xmx12144m&#34;两个值都必须相同。 我想如果你试试&#34;设置HEAP = -Xms2048m -Xmx2048m&#34;错误将消失。

答案 3 :(得分:0)

使用-Xss选项

增加jmeter堆栈大小