Karate 并行运行测试会导致java堆内存不足。

Karate 并行运行测试会导致java堆内存不足。,karate,Karate,运行并行测试会导致java堆内存不足。但是当我不并行运行它们时,就没有内存问题了。这是错误-[java.lang.OutOfMemoryError:java堆空间 位于java.util.Arrays.copyOf(Arrays.java:3332) 位于java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124) 位于java.lang.AbstractStringBuilder.a

运行并行测试会导致java堆内存不足。但是当我不并行运行它们时,就没有内存问题了。这是错误-[java.lang.OutOfMemoryError:java堆空间 位于java.util.Arrays.copyOf(Arrays.java:3332) 位于java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124) 位于java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:448)
在java.lang.StringBuilder.append(StringBuilder.java:136)

每当创建对象时,都会从堆中为对象分配内存,当不再需要该对象时,内存会返回到堆空间。如果并行运行测试,则会有不同的线程同时向堆中添加对象,并且堆空间会耗尽。当您运行这些对象时,一旦测试完成其任务,就会使用单线程对象从堆中移除,因此堆中有空间用于下面测试中的对象


要修复此问题,请尝试增加用于运行测试的堆空间。

是,请尝试增加堆空间:

此外,您还可以减少并行线程的数量。听起来您似乎试图使用太多的线程

编辑:此问题已在中修复


EDIT2:空手道1.0应该有很大的改进

这是因为你正在进行并行执行,而空手道提供了大量日志, 进行以下更改,使平行螺纹为1,2或最大值为3

  <root level="info">
   <!--<appender-ref ref="STDOUT" />-->
    <appender-ref ref="FILE" />
  </root>

我不得不关闭日志(空手道0.9.6):


这在空手道1.0.0中已经被修复了。

我已经将我的线程从5个减少到了3个。谜题的一部分是-不久前5个线程通过了相同的测试集。现在的堆大小大约是7 gig,这并不小。@Kumar112答案很简单-你现在有更多的测试:)还有,你在使用maven cucumber reporti吗ng插件?当您使用它生成报告时,存在一个已知问题。除非您有较大的有效负载或正在进行文件上载,否则空手道的内存消耗是最小的。@Peter Thomas测试没有显著增加。但是,我确实有一些文件上载测试。我将尝试删除它们,看看它是否解决了问题。@Kumar112好的,我没有更多想法。因此,除非你能缩小问题范围,以便我能在我的环境中复制这个问题,否则我什么也做不了。发挥你的创造力,试着一个接一个地对测试进行评论/标记删除测试等等。空手道在世界各地都很好。我在美国维吉尼亚。我一定会给你发电子邮件。谢谢你的帮助!我当我在twitter和linkedin上关注你时,是否看到了0.8.0的发行说明(我的名字是anilkumar.moka)@Peter Thomas。我会测试它并让你知道。谢谢。我尝试了启用日志记录,但测试时间太长,无法完成。如果没有日志,测试将在3分钟内完成,而没有日志,测试将在14分钟内完成。我再次禁用了它们。如果你需要我提供任何具体信息来帮助解决问题,请告诉我。@Kumar112好的,至少没有更多OOM。但是哇,我会的ld没有期望那么多-这可能意味着您的HTTP有效负载非常冗长。目前没有什么,对于下一个版本,我将尝试添加一个功能,以在并行运行时提供更多数据,以了解哪个功能需要时间。Karate 1.0不应再看到这些问题。我建议您首先测试1.0,而不是这些黑客攻击针对问题,提交一种复制方法:
karate.configure('report', { showLog: false});