我正在使用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 set 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 回答
我认为你的问题更多地与你的服务器因负载而减速以及你没有在Http请求上设置超时这一事实意味着他们等到你的服务器响应 .
首先要做的是在HTTP Request Default element中设置连接和响应超时 .
接下来是检查您在负载测试时是否遵循最佳实践,请参阅:
http://jmeter.apache.org/usermanual/best-practices.html
http://www.ubik-ingenierie.com/blog/jmeter_performance_tuning_tips/
最后关于你的GC调优,我建议你保持:
作为总结,JMeter将能够毫无问题地加载测试1000个用户并且您将不需要20台机器:-)
我使用在JMeter.bat文件中设置的ThreadStackSize = 4096进行了测试,但仍然存在问题(我的场景以批处理模式启动) . 发送以下请求:
如您所见,2个请求之间有30分钟
匹配的JMeter视图如下:
“Begin Loop Page de App From Tree”是一个调试采样器,它通过一个“If Create Scope”,它是一个“If Statement”,后跟一个“Loop Create Technology”,其中loop设置为1,如下所示:
随后在调试采样器“Begin Loop Page de prop App From Tree”后30分钟执行调试采样器“-------------- Technology” .
使用的定时器是Constant Timer .
应该注意的是,在使用高斯定时器的另一种情况下我遇到了同样的问题 . 计时器值取决于操作,但介于2000毫秒和6000毫秒之间 . 在另一种情况下,如果我删除while语句,则该方案有效......不幸的是,我需要while语句 . 在这种情况下,问题似乎来自循环设置为1 .
关于VisualVM工具,我刚看到垃圾收集器经常完成 . 我没有看到内存问题...但是我会在下一次测试中看一下 .
希望能帮助到你
问候
西尔维
实际上,我在上面进行的测试将Connect timeout设置为1000,响应超时为2000就在单个线程(用户)上 . 因此套接字错误可能是由于连接超时参数太低......
我更改了这些参数,并将连接超时设置为60 000(1分钟),将响应超时设置为360 000(6分钟,因为有时我们有请求不发送响应,我们将它们限制为5分钟,这是非常罕见的,但这阻止了这种情况) .
我删除了这来自JMeter.bat文件:
我以50个用户的批处理模式播放了我的场景 . 似乎我们没有被阻止的线程 . 不幸的是,我们为大多数用户看到了以下内容:请求播放,服务器响应延迟很长(少于一秒),下一个请求在一小时后播放,这会产生500 HTTP错误....
示例:如果我们看一下Group6单元 . 以下内容在JTL文件中播放和编写
大多数时候,我们在计时器之后就遇到了问题 . 在这里,您可以看到上一个请求在前一个请求之后超过一个小时播放(这是一个JMeter计时器)...我们的应用程序日志显示最后一个请求从未发送到应用程序 . 所以这意味着JMeter在发送请求之前暂停了一个多小时 . 应该注意的是,如果我们从我们的场景中删除while语句,它就可以工作 . 还应注意,错误不适用于while语句附近 .
由于您认为服务器过载,我使用性能监视器注册了Windows指示器 . 看起来测试期间的平均CPU大约是10%(可能是因为大多数线程都停止了) . 如果我看看10:31,CPU不会超过30% .
如果我检查了内存消耗,发生问题时有20 GB的RAM可用 .
所以,我认为服务器没有超载......
我从JMeter日志中检索此信息 . 似乎问题来自JMeter堆栈溢出 . 我不知道如何解决这个问题 . 我试图更改JMeter.bat参数但我们有副作用 . 这是JMeter日志的一部分:
我现在已经有一个月了解这个问题,我不知道如何解决它...如果你有一个想法,我真的很感激 .
问候
西尔维