JMeter停止发送特定线程的HTTP请求
我使用的是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停止发送特定线程的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
- 更改JMeter.bat设置
- 升级JMeter版本
- 增加计时器,以减少场景的压力
Sylvie我认为您的问题更多地与服务器因负载而变慢有关,并且您没有在Http请求上设置超时,这意味着他们会等待服务器响应 所以首先要做的是在一个数据库中设置连接和响应超时 下一步是检查您在进行负载测试时是否遵循了最佳实践,请参阅:
作为总结,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'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">
**于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工具,我刚刚看到垃圾收集器非常频繁。我没有看到内存问题。。。但我会在下一次测试中看一看
希望能有帮助
问候
SylvieHello,我在HTTP请求默认值中添加了关于连接超时和响应超时的参数化。我将连接设置为1000,响应设置为2000,JMEter向我发回一个套接字错误:java.net.SocketTimeoutException:Read在sun.reflect.GeneratedConstructorAccessor33.newInstance(未知源)在sun.reflect.DelegatingConstructorAccessorImpl.newInstance处超时