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

我正在使用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堆大小太低 – >我解决了在每个jmeter实例的jmeter.bat文件中设置以下内容:

    设置HEAP = -Xms4g -Xmx4g

    设置NEW = -XX:NewSize = 4g -XX:MaxNewSize = 4g

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

无论如何问题仍然存在。 我真的不知道如何解决它。 我知道用2600音调请求进行10小时测试可能是一个非常繁重的测试,但我认为应该有一种方法来执行此操作。 我正在使用EC2 m3.xlarge实例,所以我甚至可以将堆大小提高到8G(如果它有用),或者将工作负载分成更多的客户端,因为我使用的是spot实例,所以我不会付出这么多,但是因为我已经将客户端实例的数量从4增加到8,以便解决问题并且不起作用我有点困惑,我想知道r建议,然后继续获得越来越多的资源。 非常感谢你提前。

您的堆设置看起来错误:设置HEAP = -Xms4g -Xmx4g设置NEW = -XX:NewSize = 4g -XX:MaxNewSize = 4g

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

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

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

最后,显示您的测试计划和您启动的线程数的概述。