JMeter停止发送特定线程的HTTP请求

时间:2014-09-12 13:51:10

标签: jmeter

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

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

测试以批处理模式启动。 jmeter结果以XML格式存储在jtl文件中。

我们制作了一个需要while语句的场景。 如果我们删除while语句,JMeter会同时处理50个用户。

如果我们添加while语句,大约80%的JMeter用户线程被正确执行(40个用户正在执行方案而没有任何问题)。 20%的JMeter用户线程在可变时段内停止:有时15分钟,有时40分钟,有时是一小时,然后场景继续下一个语句(10个用户正在启动请求,然后在15分钟内停止,例如然后重新启动)。

通过使用调试采样器跟踪活动,它只会在几秒钟的计时器之前或之后停止。例如,它在40分钟内停止,40分钟后,它再次发送HTTP请求(问题是我的IIS应用程序会话超时且所有请求都失败)。 似乎我们添加调试采样器越多,JMeter工作得越多。 没有日志...

我们尝试了以下方法:

  • 更改JMeter.bat设置

  • 升级JMeter版本

  • 增加计时器以使场景压力减轻

没有任何作用。我们仍然有问题。因此,我想知道JMeter是否已达到其最大容量。 应该注意的是,喷油器CPU约为60%且内存正常。

我担心的是50个用户非常低......我们需要处理1000个用户的测试,我们不能购买20台机器来处理喷射器。

如果有人对这个问题有任何想法,我真的很感激。

此致

西尔维

3 个答案:

答案 0 :(得分:1)

我认为您的问题与您的服务器因加载速度减慢更相关,而且您没有在Http请求上设置超时,这意味着他们会等到您的服务器响应。

首先要做的是在HTTP Request Default element中设置连接和响应超时。

下一步是检查您在负载测试时是否遵循最佳做法,请参阅:

最后关于你的GC调整,我建议你保留:

  

设置HEAP = -Xms512m -Xmx12144m

     

设置PERM = -XX:PermSize = 64m -XX:MaxPermSize = 64m

作为总结,JMeter将能够毫无问题地加载测试1000个用户,您将不需要20台机器: - )

答案 1 :(得分:1)

我使用在JMeter.bat文件中设置的ThreadStackSize = 4096进行了测试,但仍然存在问题(我的方案是以批处理模式启动的)。 发送以下请求:

**Sent at 19/09/2014 12:06:06**


<sample t="0" lt="0" ts="1411121166434" s="true" lb="------------------------Begin Loop Page de prop App   From Tree " rc="200" rm="OK" tn="Groupe d&apos;unitأ©s  APM 1-9" dt="text" by="923">

**sent at  19/09/2014 12:36:16**


<sample t="0" lt="0" ts="1411122975778" s="true" lb="----------Technology  " rc="200" rm="OK" tn="Groupe d&apos;unitأ©s  APM 1-9" dt="text" by="923">

如您所见,2个请求之间有30分钟

匹配的JMeter视图如下:

enter image description here

&#34;从Tree&#34;开始Loop Page de prop App是一个调试采样器,它通过&#34;如果创建范围&#34;这是一个&#34; If Statement&#34;然后是&#34; Loop Create Technology&#34;其中loop设置为1,如下所示:

enter image description here

其次是调试采样器&#34; --------------技术&#34;在调试采样器&#34; Begin Loop Page de prop App From Tree&#34;。

之后30分钟执行

使用的定时器是Constant Timer。

应该注意的是,在使用高斯定时器的另一种情况下我遇到了同样的问题。计时器值取决于操作,但介于2000毫秒和6000毫秒之间。 在另一种情况下,如果我删除while语句,则该方案有效......不幸的是,我需要while语句。 在这种情况下,问题似乎来自于设置为1的循环。

关于VisualVM工具,我刚看到垃圾收集器非常频繁地完成。我没有看到内存问题......但是我会在下一次测试中看一下它。

希望有所帮助

此致

西尔维

答案 2 :(得分:0)

事实上,我在上面进行的测试将Connect timeout设置为1000,响应超时设置为2000就在单个线程(用户)上。 因此套接字错误可能是由于连接超时参数太低......

我更改了这些参数并将连接超时设置为60 000(1分钟)并将响应超时设置为360 000(6分钟,因为有时我们有请求不发送响应,我们将它们限制为5分钟,这是非常罕见的,但这是阻止场景。)

我从JMeter.bat文件中删除了它:

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

我以50个用户的批处理模式播放了我的场景。似乎我们没有被阻止的线程。不幸的是,我们看到了大多数用户的以下内容:请求播放,服务器响应延迟很长(少于一秒),下一个请求播放一小时后会产生500 HTTP错误....

示例:如果我们看一下Group6单元。以下内容在JTL文件中播放和写入

<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>

**played 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>

**played 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"/>

**played 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>

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

大多数时候,我们在计时器之后就遇到了问题。在这里,您可以看到上一个请求在前一个请求之后超过一个小时播放(这是一个JMeter计时器)... 我们的应用程序日志显示最后一个请求从未发送到应用程序。 所以这意味着JMeter在发送请求之前暂停了一个多小时。 应该注意的是,如果我们从我们的场景中删除while语句,它就可以工作。 还应注意,错误不适用于while语句附近。

由于您认为服务器过载,我使用性能监视器注册了Windows指示器。 看起来测试期间的平均CPU大约是10%(可能是因为大多数线程都停止了)。如果我看看10:31,CPU不会超过30%。

如果我检查了内存消耗,则在出现问题时可以使用20 GB的RAM。

所以,我认为服务器没有超载...

我从JMeter日志中检索此信息。似乎问题来自JMeter堆栈溢出。我不知道如何解决这个问题。我试图更改JMeter.bat参数但我们有副作用。 这是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 

我这个问题已经有一个月了,我不知道怎么解决它... 如果你有一个想法,我真的很感激。

此致

西尔维

相关问题