首页 文章

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

提问于
浏览
2

我正在使用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 回答

  • 0

    我认为你的问题更多地与你的服务器因负载而减速以及你没有在Http请求上设置超时这一事实意味着他们等到你的服务器响应 .

    首先要做的是在HTTP Request Default element中设置连接和响应超时 .

    接下来是检查您在负载测试时是否遵循最佳实践,请参阅:

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

    设置HEAP = -Xms512m -Xmx12144m设置PERM = -XX:PermSize = 64m -XX:MaxPermSize = 64m

    作为总结,JMeter将能够毫无问题地加载测试1000个用户并且您将不需要20台机器:-)

  • 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个请求之间有30分钟

    匹配的JMeter视图如下:

    enter image description here

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

    enter image description here

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

    使用的定时器是Constant Timer .

    应该注意的是,在使用高斯定时器的另一种情况下我遇到了同样的问题 . 计时器值取决于操作,但介于2000毫秒和6000毫秒之间 . 在另一种情况下,如果我删除while语句,则该方案有效......不幸的是,我需要while语句 . 在这种情况下,问题似乎来自循环设置为1 .

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

    希望能帮助到你

    问候

    西尔维

  • 1

    实际上,我在上面进行的测试将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
    

    我现在已经有一个月了解这个问题,我不知道如何解决它...如果你有一个想法,我真的很感激 .

    问候

    西尔维

相关问题