Jmeter java.lang.OutOfMemoryError: GC overhead limit exceeded

Jmeter java.lang.OutOfMemoryError: GC overhead limit exceeded

我正在使用 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 overhead limit exceeded 错误,在测试开始后立即出现,并且没有请求到达应用程序。我在网上和 Whosebug 上看了很多,我总结出可能的错误可能是:

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

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

你的new等于Heap size,这是错误的。先评论新的部分。

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

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

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