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,或者因为我使用的是竞价型实例,所以将工作负载分配给更多的客户端,所以我不会付出太多,但是由于我已经将客户端实例的数量从4个增加到8个,以解决该问题,并且无法正常工作,我有点困惑,我想在继续获取越来越多的资源之前先了解一些建议。预先非常感谢。
问题答案:
您的堆设置看起来不正确:set HEAP = -Xms4g -Xmx4g set NEW = -XX:NewSize = 4g -XX:MaxNewSize
= 4g
您的新值等于堆大小,这是错误的。首先评论新部分。
您可以执行ps -eaf | grep java并显示输出吗?
并检查您是否遵守以下建议:
- http://jmeter.apache.org/usermanual/best-practices.html
- http://www.ubik-ingenierie.com/blog/jmeter_performance_tuning_tips/
最后,显示测试计划的概述,以及您启动的线程数。