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上读了很多书,我认为可能的错误是: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分钟的时间
- JMV heap size过低->我解决了在每个jmeter实例的jmeter.bat文件中设置以下问题: 设置HEAP=-Xms4g-Xmx4g set NEW=-XX:NewSize=4g-XX:MaxNewSize=4g
- 代码中的一些错误导致垃圾收集器继续被无用地使用。因此,我从测试中删除了所有jmeter侦听器。我特别使用了TableVisualizer、ViewResultsFullVisualizer、StatVisualizer和GraphVisualizer
提前非常感谢。您的堆设置似乎有误: 设置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个请求,但我认为应该有一种方法来做到这一点。