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

Running tests parallelly gives java heap out of memory.

运行 并行测试导致 java 堆内存不足。但是当我 运行 它们不并行时,就没有内存问题。这是错误- [java.lang.OutOfMemoryError: Java heap space 在 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)

每当创建对象时,都会从堆中为对象分配内存,当不再需要该对象时,内存会返回堆space。如果测试是 运行 并行的,将有不同的线程同时向堆中添加对象,而你 运行 超出堆 space。当你 运行 它们是单线程时,一旦测试完成,它的对象就会从堆中删除,因此堆中有 space 用于以下测试中的对象。

要修复它,请尝试增加用于 运行 测试的堆 space。

是的,尝试增加堆space:

您还可以减少并行线程的数量。听起来你试图使用太多。

编辑:此问题已在 v0.8.0

中修复

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

发生这种情况是因为您正在进行并行执行并且空手道会提供大量日志, 进行以下更改并使并行线程 1,2 或最大 3。

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

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

karate.configure('report', { showLog: false});

这已在空手道 1.0.0 中修复