如何使用maven jvmArg解决“超出GC开销限制”?
运行类时,我有以下exception:
线程“main”中的exceptionjava.lang.OutOfMemoryError:超出了GC开销限制
我试图从类包的maven pom.xml中增加jvmArg堆大小:
http://maven.apache.org/xsd/maven-4.0.0.xsd“> 4.0.0
(...) (...) (...) 4g ${project.basedir}/.. net.alchim31.maven scala-maven-plugin MyClassName (...) -Xmx${javaOpts.Xmx} (...)
我尝试了最后引用的行,其中包含许多值:
-
-Xmx512m{javaOpts.Xmx}
-
-Xmx4096M{javaOpts.Xmx}
- …
-
-Xmx10000000000M{javaOpts.Xmx}
但对于他们所有人我都有同样的错误。
有人可以帮帮我吗? 观察:我是从IntelliJ IDEA运行的。
Java 7
这不是Maven问题,您需要为VM提供更多内存。 您可以通过环境变量执行此操作,Maven Launcher将在加载时自动获取这些设置,并使用它们来配置底层Java VM。
这样做的简单方法是:
export MAVEN_OPTS="-Xmx1024M -Xss128M -XX:MaxPermSize=1024M -XX:+CMSClassUnloadingEnabled"
视窗:
set MAVEN_OPTS=-Xmx1024M -Xss128M -XX:MaxPermSize=1024M -XX:+CMSClassUnloadingEnabled
(没有双引号)
Java 8
Java 8用元空间替换了永久代,新设置如下所示:
export MAVEN_OPTS="-Xmx1024M -Xss128M -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=1024M -XX:+CMSClassUnloadingEnabled"
将并行垃圾收集添加到上面的答案可能是最好的选择:
-Xmx2048M -Xss128M -XX:MaxPermSize=2048M -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC
我遇到了同样的问题:我的项目wokspace由> 250个maven模块组成,当在IDEA中打开一个pom.xml
时,
和
标签以红色下划线显示,当鼠标hover在破碎的标签:
java.lang.OutOfMemoryError:超出了GC开销限制
我的解决方案
- 在
>Settings >Build, Execution, Deployment >Build Tools >Maven >Importing
设置高值 – 例如-Xmx1g
和 - 将
>Settings >Build, Execution, Deployment >Build Tools >Maven
(Maven主目录)下的maven实现从(Bundled) Maven 3
更改为我的本地maven安装(不是与IDEA捆绑的安装),例如更改为/opt/maven/apache-maven-3.3.9
:
由于之前我遇到了捆绑maven的问题,我只是不相信捆绑的maven。
在某些情况下,您可以禁用GC限制:
-XX:-UseGCOverheadLimit
很抱歉很晚才回复,但我认为我的回答也可以帮助其他人。
scala-maven-plugin不能与MAVEN_OPTS一起使用,增加内存的唯一方法是在插件配置中使用jvmArgs。 但你应该把jvmArgs放在启动器部分,但在配置部分,如下所示:
-Xmx1024m -Xms256m
这对我有用。
您正在将jvmArgs添加到pom.xml中的maven-scala-plugin配置中。
你是什么意思从IntelliJ IDEA运行? 你究竟是怎么做到的? 通过他们的构建/运行,你根本不会通过Maven! 然后更改pom.xml中的maven-scala-plugin启动器基本上没用。 要更改IntelliJ的运行配置,请参阅此答案 。
如果你真的想从Maven运行,在将jvmArg参数添加到pom.xml后,则需要运行该插件:
mvm scala:run -Dlauncher=MyClassName
注意:放置MyClassName的位置,实际上是启动器的名称,而不是类。 对于许多项目,人们为发射器选择合理的名称,这使得它们通常与类的本地名称一致。 但如果你愿意,你可以称之为MyLauncher。
阅读maven-scala-plugin的文档可能会对你有所帮助。