JMeter停止发送特定线程的HTTP请求
我正在使用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台机器来处理注射器。
如果有人对这个问题有任何想法,我会很感激。
问候
西尔维
我觉得你的问题更关系到你的服务器放慢由于负载而事实上,你没有设置HTTP请求超时意味着他们等到你的服务器响应。
因此,首先要做的事情是在HTTP Request Default element中设置连接和响应超时。
接下来的事情就是检查你遵循最佳做法时的负载测试,看看这个:
最后对您的GC调整,我建议你只需保留:
组HEAP = -Xms512m -Xmx12144m
组PERM = -XX:PermSize =64米-XX:MaxPermSize参数=64米
作为总结JMeter会能够加载测试而没有任何问题1000名的用户而且你不需要20台机器:-)
你好,我添加了有关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
因此,这证实了我所说的,即它不是挂起的jmeter,它只是等待服务器的响应,当您添加超时你说我会等待2秒,合理的等待应该更高,连接应该低于响应超时。无论如何调查服务器性能现在。 – 2014-09-15 20:01:15
你好,我仍然有问题,这似乎是由于堆栈溢出JMeter方面。你可以看到我的问题的其他信息。问候西尔维 – 2014-09-17 08:52:13
事实上,我在上面用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个月这个问题,我不知道如何解决它... 如果你有一个想法,我真的很感激。
问候
西尔维
你能给我们一个你的JMeter配置文件的图片,看看你使用哪些元素(扩大视图)?你使用什么样的计时器,以及你设置了多少等待时间?我也尝试使用不同的JRE版本。 JMeter邮件列表中有人描述了类似的问题,使用ThreadStackSize = 4096解决了这种情况。同时尝试从您的配置文件中删除while循环。您也可以将VisualVM连接到Jmeter以检查内存消耗是否有任何异常。 – 2014-09-18 09:54:00
您好,我通过答复标签向您发送了一封回复,谢谢您的回复。 – 2014-09-23 12:53:29
我在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'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'unitأ©s APM 1-9" dt="text" by="923">
正如你所看到的,有2个请求
匹配JMeter的视图之间30分钟就以下事项:
“开始循环页面支持应用程序从树“是一个调试采样器,它通过一个”如果创建范围“这是一个”如果声明“,其次是”循环创建技术“,其中循环设置为1,如下所示:
其次是调试取样“--------------技术”执行的调试取样后30分钟“开始循环页德道具应用程序从一棵树”。
使用的定时器是定时器。
应该指出,我在高斯定时器的另一场景中遇到同样的问题。定时器值取决于操作,但是在2000毫秒和6000毫秒之间。 在另一种情况下,如果我删除while语句,该场景有效......不幸的是,我需要while语句。 在这种情况下,问题似乎来自设置为1的循环。
关于VisualVM工具,我刚刚看到垃圾收集器非常频繁地完成。我没有看到内存问题......但我会在下一次测试中看看它。
希望它可以帮助
问候
西尔维
[JMeter的StackOverflow上]的
可能重复(http://stackoverflow.com/questions/25907876/jmeter-stackoverflow) – 2014-10-14 19:35:11