How to solve "GC overhead limit exceeded" using maven jvmArg?
Solution 1
Java 7
It's not a Maven issue, you need to give more memory to the VM. You do this via environment variables, and the Maven Launcher will automatically pick up these settings on load, and use them to configure the underlying Java VM.
The simple way to do it is to:
export MAVEN_OPTS="-Xmx1024M -Xss128M -XX:MaxPermSize=1024M -XX:+CMSClassUnloadingEnabled"
Windows:
set MAVEN_OPTS=-Xmx1024M -Xss128M -XX:MaxPermSize=1024M -XX:+CMSClassUnloadingEnabled
(No double quotes)
Java 8
Java 8 has replaced permanent generation with metaspace, and the new settings look like this:
export MAVEN_OPTS="-Xmx1024M -Xss128M -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=1024M -XX:+CMSClassUnloadingEnabled"
Solution 2
I had kind of the same problem: My project wokspace consists of >250 maven modules and when opening a pom.xml
in IDEA, the <project>
and <parent>
tags were underlined in red and this error showed up, when hovering over the broken tags:
java.lang.OutOfMemoryError: GC overhead limit exceeded
My solution:
- set high values in
>Settings >Build, Execution, Deployment >Build Tools >Maven >Importing
- e.g.-Xmx1g
and - change the maven implementation under
>Settings >Build, Execution, Deployment >Build Tools >Maven
(Maven home directory) from(Bundled) Maven 3
to my local maven installation (not the one bundled with IDEA), e.g. to/opt/maven/apache-maven-3.3.9
:
Since I had problems with the bundled maven before, I just don't trust the bundled maven.
Solution 3
Adding parallel garbage collection to the top answer above is probably the best option:
-Xmx2048M -Xss128M -XX:MaxPermSize=2048M -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC
Solution 4
In some cases you may disable GC limit:
-XX:-UseGCOverheadLimit
Solution 5
Sorry for very late response, but I think my answer might help other people as well.
scala-maven-plugin doesn't work with MAVEN_OPTS, the only way to increase memory is to use jvmArgs in the plugin configuration. But you should put jvmArgs not inside launcher section, but inside configuration section, like this:
<configuration>
<jvmArgs>
<jvmArg>-Xmx1024m</jvmArg>
<jvmArg>-Xms256m</jvmArg>
</jvmArgs>
</configuration>
This works for me.
Admin
Updated on October 14, 2020Comments
-
Admin over 3 years
When running a class I have the following exception:
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
I've tried to increase the jvmArg heap size from inside maven pom.xml of the class package:
http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0
<parent> (...) </parent> <artifactId>(...)</artifactId> <name>(...)</name> <properties> <javaOpts.Xmx>4g</javaOpts.Xmx> <!-- default that can be adjusted on the command line with -DjavaOpts.Xmx=... --> <(...).basedir>${project.basedir}/..</(...).basedir> </properties> <build> <plugins> <plugin> <groupId>net.alchim31.maven</groupId> <artifactId>scala-maven-plugin</artifactId> <configuration> <launchers> <launcher> <id>MyClassName</id> <mainClass>(...)</mainClass> <jvmArgs> <jvmArg>-Xmx${javaOpts.Xmx}</jvmArg> (...)
I've tried the last cited line with many values:
<jvmArg>-Xmx512m{javaOpts.Xmx}</jvmArg>
<jvmArg>-Xmx4096M{javaOpts.Xmx}</jvmArg>
- ...
<jvmArg>-Xmx10000000000M{javaOpts.Xmx}</jvmArg>
But for all of them I have the same error.
Anyone can help me? Observation: I'm running from IntelliJ IDEA.