2014-09-12 67 views
2

我正在使用JMeter 2.11。 以下参数在jmeter.bat文件中定义JMeter停止发送特定线程的HTTP请求

组HEAP = -Xms512m -Xmx12144m 设置NEW = -XX:新尺寸=128米-XX:MaxNewSize =128米设置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个用户在执行场景时没有任何问题)。 JMeter用户线程的20%在变量期间停止:有时15分钟,有时40分钟,有时1小时,然后场景继续与下一个语句相关(10个用户正在启动请求,然后在15分钟内停止,例如,然后重新开始)。

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

我们尝试了以下内容:

  • 变化JMeter.bat设置

  • 升级版本的JMeter

  • 增加计时器,以便在场景中要压力较小

没有用。我们仍然有这个问题。因此,我想知道JMeter是否已达到其最大容量。 需要注意的是注射器的CPU大概在60%左右,并且内存还可以。

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

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

问候

西尔维

+0

可能重复(http://stackoverflow.com/questions/25907876/jmeter-stackoverflow) – 2014-10-14 19:35:11

回答

1

我觉得你的问题更关系到你的服务器放慢由于负载而事实上,你没有设置HTTP请求超时意味着他们等到你的服务器响应。

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

接下来的事情就是检查你遵循最佳做法时的负载测试,看看这个:

最后对您的GC调整,我建议你只需保留:

组HEAP = -Xms512m -Xmx12144m

组PERM = -XX:PermSize =64米-XX:MaxPermSize参数=64米

作为总结JMeter会能够加载测试而没有任何问题1000名的用户而且你不需要20台机器:-)

+0

你好,我添加了有关HTTP请求默认值上的连接超时和响应超时的参数化。我设置连接到1000和2000响应和JMEter发送给我一个套接字错误:java.net.SocketTimeoutException:读取超时 \t在sun.reflect。GeneratedConstructorAccessor33.newInstance(Unknown Source) \t at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) – 2014-09-15 19:31:26

+1

因此,这证实了我所说的,即它不是挂起的jmeter,它只是等待服务器的响应,当您添加超时你说我会等待2秒,合理的等待应该更高,连接应该低于响应超时。无论如何调查服务器性能现在。 – 2014-09-15 20:01:15

+0

你好,我仍然有问题,这似乎是由于堆栈溢出JMeter方面。你可以看到我的问题的其他信息。问候西尔维 – 2014-09-17 08:52:13

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

我就因为现在1个月这个问题,我不知道如何解决它... 如果你有一个想法,我真的很感激。

问候

西尔维

+0

你能给我们一个你的JMeter配置文件的图片,看看你使用哪些元素(扩大视图)?你使用什么样的计时器,以及你设置了多少等待时间?我也尝试使用不同的JRE版本。 JMeter邮件列表中有人描述了类似的问题,使用ThreadStackSize = 4096解决了这种情况。同时尝试从您的配置文件中删除while循环。您也可以将VisualVM连接到Jmeter以检查内存消耗是否有任何异常。 – 2014-09-18 09:54:00

+0

您好,我通过答复标签向您发送了一封回复,谢谢您的回复。 – 2014-09-23 12:53:29

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个请求

匹配JMeter的视图之间30分钟就以下事项:

enter image description here

“开始循环页面支持应用程序从树“是一个调试采样器,它通过一个”如果创建范围“这是一个”如果声明“,其次是”循环创建技术“,其中循环设置为1,如下所示:

enter image description here

其次是调试取样“--------------技术”执行的调试取样后30分钟“开始循环页德道具应用程序从一棵树”。

使用的定时器是定时器。

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

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

希望它可以帮助

问候

西尔维

[JMeter的StackOverflow上]的