prashant-ramcharan / courgette-jvm

Multiprocess | Parallel Cucumber-JVM | Parallelize your Java Cucumber tests on a feature level or on a scenario level.
MIT License
131 stars 38 forks source link

problem with java.lang.OutOfMemoryError: Java heap space #303

Closed yariks80 closed 2 years ago

yariks80 commented 2 years ago

version - 'io.github.prashant-ramcharan:courgette-jvm:5.9.2'

java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:3332) at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124) at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:448) at java.lang.StringBuilder.append(StringBuilder.java:136) at java.lang.ProcessEnvironment.addToEnv(ProcessEnvironment.java:344) at java.lang.ProcessEnvironment.toEnvironmentBlock(ProcessEnvironment.java:321) at java.lang.ProcessEnvironment.toEnvironmentBlock(ProcessEnvironment.java:349) at java.lang.ProcessImpl.start(ProcessImpl.java:94) at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) at courgette.runtime.CourgetteFeatureRunner.run(CourgetteFeatureRunner.java:28) at courgette.runtime.CourgetteRunner.runFeature(CourgetteRunner.java:245) at courgette.runtime.CourgetteRunner.lambda$run$3(CourgetteRunner.java:75) at courgette.runtime.CourgetteRunner$$Lambda$99/581661871.call(Unknown Source) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError: Java heap space: failed reallocation of scalar replaced objects

prashant-ramcharan commented 2 years ago
  1. Are you passing any -Xms and Xmx memory args to the gradle or maven process?
  2. How much memory does your machine have?
  3. How many tests are you running in parallel?
  4. What version of Java are you using?
  5. Does this happen on every run?
  6. What Courgette run level are you using?
yariks80 commented 2 years ago

1) GRADLE_OPTS= -Xmx2g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 in Gradle 2)64 3) 240 test cases 4) Java 1.8 5) yes it is happen every run 6) runLevel = CourgetteRunLevel.SCENARIO,

prashant-ramcharan commented 2 years ago

A max heap size of 2g is quiet low considering you running 240 scenarios as Courgette uses memory to store the reports / results for processing at the end of the test run.

How many Courgette threads are you using?

Can you try setting the jvmargs for the gradle daemon process by adding this to your gradle.properties ?

org.gradle.jvmargs=-Xmx16g
yariks80 commented 2 years ago

We have between 5-10 threads in Jenkins job. What kind of settings we need setup in job better

prashant-ramcharan commented 2 years ago
  1. Increase the -Xmx memory in org.gradle.jvmargs or GRADLE_OPTS read more here
  2. Add this to your build.gradle (you should tweak the memory for your test needs / environment etc)
tasks.withType(Test) {
    jvmArgs = ['-Xmx8g']
}