Jmeter java.lang.OutOfMemoryError:超出GC开销限制

Jmeter java.lang.OutOfMemoryError:超出GC开销限制,java,amazon-ec2,garbage-collection,jvm,jmeter,Java,Amazon Ec2,Garbage Collection,Jvm,Jmeter,我使用Jmeter将工作负载注入部署在AWS EC2实例上的应用程序。测试必须非常庞大:它持续10个小时,工作负载配置文件具有双峰形状,在5分钟内大约有2600个请求。实际上,我有一个部署应用程序的m3.xlarge实例和8个m3.xlarge实例,每个实例运行一个jmeter实例。使用python脚本,要注入的工作负载在8个客户机实例之间进行分割,因此在示例中,如果原始工作负载要注入800个请求,那么每个jmeter实例将注入100个请求。正如我所说的,整个测试持续10个小时,分为5分钟的时间

我使用Jmeter将工作负载注入部署在AWS EC2实例上的应用程序。测试必须非常庞大:它持续10个小时,工作负载配置文件具有双峰形状,在5分钟内大约有2600个请求。实际上,我有一个部署应用程序的m3.xlarge实例和8个m3.xlarge实例,每个实例运行一个jmeter实例。使用python脚本,要注入的工作负载在8个客户机实例之间进行分割,因此在示例中,如果原始工作负载要注入800个请求,那么每个jmeter实例将注入100个请求。正如我所说的,整个测试持续10个小时,分为5分钟的时间段。每5分钟应用一点工作负载变化。实际上,我从每个jmeter实例得到java.lang.OutOfMemoryError:GC开销限制在测试启动后立即超过了错误,并且没有请求到达应用程序。我在网上和stackoverflow上读了很多书,我认为可能的错误是:

  • JMV heap size过低->我解决了在每个jmeter实例的jmeter.bat文件中设置以下问题:

    设置HEAP=-Xms4g-Xmx4g

    set NEW=-XX:NewSize=4g-XX:MaxNewSize=4g

  • 代码中的一些错误导致垃圾收集器继续被无用地使用。因此,我从测试中删除了所有jmeter侦听器。我特别使用了TableVisualizer、ViewResultsFullVisualizer、StatVisualizer和GraphVisualizer

无论如何,问题依然存在。我真的不知道怎么解决它。我知道10个小时的测试和2600个投球要求可能是一个非常沉重的测试,但我认为应该有一种方法来完成这一点。我使用的是EC2 m3.xlarge实例,因此如果有用的话,我甚至可以将堆大小提高到8G,或者在更多客户机之间分配工作负载,因为我使用的是spot实例,所以我不会支付太多,但是由于我已经将客户端实例的数量从4个增加到了8个,以解决这个问题,并且is不起作用,所以我有点困惑,我想在继续获得越来越多的资源之前了解r建议。
提前非常感谢。

您的堆设置似乎有误: 设置HEAP=-Xms4g-Xmx4g set NEW=-XX:NewSize=4g-XX:MaxNewSize=4g

您的新堆大小等于堆大小,这是错误的。首先评论新的部分

你能做一个ps-eaf | grep java并显示输出吗

并检查您是否尊重这些建议:


最后,展示您的测试计划的概述,以及您启动的线程数。

是的,JMeter是一个臭名昭著的资源贪婪者。在测试过程中,一定要关闭所有积累数据的组件。将jmeter.bat设置中的heap和NEW参数修改为2/4/8g是正确的,新参数看起来是错误的。如果你得到了OOME,这意味着有许多旧对象被保留,而那些
NEW
参数迫使JVM将所有东西都视为新对象。这意味着小型地面军事系统将非常缓慢。让JVM动态调整各代的大小通常是最好的选择。我如何才能做到这一点?我刚刚尝试设置了以下内容:set HEAP=-Xms8g-Xmx8g set NEW=-XX:-usegcrowedlimit-XX:-usegcrowedlimit,但它不起作用。我知道测试持续10个小时,每个jmeter实例必须同时启动300个请求,但我认为应该有一种方法来做到这一点。