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

时间:2015-02-24 11:22:22

标签: java amazon-ec2 garbage-collection jvm jmeter

我正在使用Jmeter将工作负载注入部署在AWS EC2实例上的应用程序。测试必须非常庞大:它持续10个小时,工作负载配置文件具有双峰形状,在5分钟内有大约2600个请求。实际上我有一个部署应用程序的m3.xlarge实例和每个运行jmeter实例的8个m3.xlarge实例。使用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建议,然后继续获得越来越多的资源。 非常感谢你提前。

1 个答案:

答案 0 :(得分:5)

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

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

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

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

最后,展示您的测试计划和您开始的线程数的概述。