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

JMeter停止发送特定线程的HTTP请求,jmeter,Jmeter,我使用的是JMeter2.11。 以下参数在jmeter.bat文件中定义 设置堆=-Xms512m-Xmx12144m set NEW=-XX:NewSize=128m-XX:MaxNewSize=128m set SURVIVOR=-XX:SurvivorRatio=8-XX:TargetSurvivorRatio=50%set TENURING=-XX:MaxTenuringThreshold=2 设置RMIGC=-Dsun.rmi.dgc.client.gcInterval=600000

我使用的是JMeter2.11。 以下参数在jmeter.bat文件中定义

设置堆=-Xms512m-Xmx12144m set NEW=-XX:NewSize=128m-XX:MaxNewSize=128m set SURVIVOR=-XX:SurvivorRatio=8-XX:TargetSurvivorRatio=50%set 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分钟内停止,然后重新启动)

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

我们尝试了以下方法:

  • 更改JMeter.bat设置

  • 升级JMeter版本

  • 增加计时器,以减少场景的压力

什么都不管用。我们仍然有问题。因此,我想知道JMeter是否已达到其最大容量。 应注意,喷油器CPU约为60%,内存正常

我担心的是50个用户数量太少了。。。我们需要处理1000个用户的测试,我们不能只购买20台机器来处理喷油器

如果有人对这个问题有任何想法,我将不胜感激

问候


Sylvie

我认为您的问题更多地与服务器因负载而变慢有关,并且您没有在Http请求上设置超时,这意味着他们会等待服务器响应

所以首先要做的是在一个数据库中设置连接和响应超时

下一步是检查您在进行负载测试时是否遵循了最佳实践,请参阅:

最后,关于GC调优,我建议您保持:

设置堆=-Xms512m-Xmx12144m

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


作为总结,JMeter将能够加载测试而不会出现任何问题1000个用户,并且您不需要20台机器来完成此任务:-)

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

我更改了这些参数,并将连接超时设置为60000(1min),将响应超时设置为360000(6min,因为有时我们有不发送响应的请求,我们将它们限制为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错误

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


http://172.16.1.23/hopex/service.aspx?data=generationType-标准|发电机-E98AEA3A4F717715
**于2014年9月16日10:31:10播放**
http://172.16.1.23/hopex/statesessionprovider.aspx
**于2014年9月16日10:31:10播放**
**于2014年9月16日10:31:15播放**
http://172.16.1.23/Hopex/service.aspx?data=generationType-标准|发电机-E98AEA3A4F717715

**播放时间为2014年9月16日11:41:33**
我使用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">
**于2014年9月19日12:06:06发送**
**发送时间:2014年9月19日12:36:16**
如您所见,两个请求之间有30分钟的间隔

匹配的JMeter视图如下所示:

“Begin Loop Page de prop App From Tree”是一个调试采样器,它经过一个“If Create Scope”,它是一个“If语句”,后跟一个“Loop Create Technology”,其中Loop设置为1,如下所示:

然后是调试采样器“------------Technology”在调试采样器“Begin Loop Page de prop App From Tree”30分钟后执行

所使用的定时器是恒定定时器

需要注意的是,在另一个场景中,高斯定时器也存在同样的问题。计时器值取决于动作,但介于2000 ms和6000 ms之间。 在另一个场景中,如果我删除while语句,该场景将正常工作。。。不幸的是,我需要while语句。 在此场景中,问题似乎来自设置为1的循环

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

希望能有帮助

问候


Sylvie

Hello,我在HTTP请求默认值中添加了关于连接超时和响应超时的参数化。我将连接设置为1000,响应设置为2000,JMEter向我发回一个套接字错误:java.net.SocketTimeoutException:Read在sun.reflect.GeneratedConstructorAccessor33.newInstance(未知源)在sun.reflect.DelegatingConstructorAccessorImpl.newInstance处超时