Build Uber Jar error: Out of memory: GC overhead limit exceeded

Hi,

After update framework to 7.1.2 version, I receive error on gradle task: buildUberJar
This happens on web module

[CubaUberJAR] Pack shared libs for project ':offers-web'
[CubaUberJAR] Pack libs progress: 0%
[CubaUberJAR] Pack libs progress: 20%

> Task :buildUberJar FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':buildUberJar'.
> GC overhead limit exceeded

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':buildUberJar'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:110)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
        at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
        at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
        at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
        at org.gradle.execution.taskgraph.LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:42)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:277)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:262)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:135)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:200)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
        at com.sun.nio.zipfs.ZipCoder.toString(ZipCoder.java:63)
        at com.sun.nio.zipfs.ZipCoder.toString(ZipCoder.java:78)
        at com.sun.nio.zipfs.ZipFileSystem.getString(ZipFileSystem.java:916)
        at com.sun.nio.zipfs.ZipPath.toString(ZipPath.java:540)
        at java_nio_file_Path$toString$7.call(Unknown Source)
        at com.haulmont.gradle.uberjar.UberJar$_canTransformEntry_closure5.doCall(UberJar.groovy:196)
        at com.haulmont.gradle.uberjar.UberJar.canTransformEntry(UberJar.groovy:195)
        at com.haulmont.gradle.uberjar.UberJar.visitFile(UberJar.groovy:189)

BTW: This not happend on buildWar task

Regards
Marcin

Hi,

Try to increase gradle memory settings:

Hi,

I tried this, but result is the same. This is very strange, because on Linux (as Windows subsystem) it works fine.

My gradle.properties file:
org.gradle.jvmargs=-Xmx20240m -XX:MaxPermSize=5120m

gradle

Redards
Marcin

Hi @marcin.zawadowicz,

What implementation of GC do you use?

Regards,
Aleksey

Hi Marcin,
What platform version did you use before the upgrade to 7.1.2? Was it version 7.1.*?

Could you execute the following commands using Gradle and attach output log files (core.log, web.log)?

gradlew :app-core:dependencies > core.log
gradlew :app-web:dependencies > web.log

Hi,
I have default settings, I didn’t change it.

Regards
Marcin

Hi,
I checked another project, but in version 7.1.1. It is the same. I don’t know what the cause is anymore.
I will build projects under linux.

Regards
Marcin

web.log (316,3 KB) core.log (289,4 KB)

gradle

buildWar - OK

gradle2

Hi,

I found reason.
The problem arises after adding the add-on: Email Templates.

Regards
Marcin

I kept digging and found a more accurate reason: GrapesJS HTML v0.4.0 which is used in Email Template s add-on.

Hi,
I suspect that your problems are related to the fact that you are using “Zulu Platform x64 Architecture” on your Windows machine.
What is it, a non-standard JVM? Azul JVM? Not sure.

The recommended JDK for CUBA development is an OpenJDK 8 or 11 64-bit (HotSpot JVM) that can be downloaded here: https://adoptopenjdk.net/

Hi,

Thank you for suggestions.

On OpenJDK 8 - the same problem.
On OpenJDK 11 - no problem.

Regards
Marcin

Hi Marcin,
I have found a cause of the problem. buildUberJar task goes to an infinite loop, it relates to a bug in JDK: [JDK-8197398] (zipfs) Files.walkFileTree walk indefinitelly while processing JAR file with "/" as a directory inside. - Java Bug System.

We’ll try to find a solution for that problem. Issue: Uber Jar task goes to an infinite loop with OutOfMemory error · Issue #124 · cuba-platform/cuba-gradle-plugin · GitHub

Thank you.

1 Like