如何修复Maven的OutOfMemoryError问题|Perm Gen空间|Java堆空间

587 阅读2分钟

java.lang.OutOfMemoryError in maven

Maven是一个自动化构建项目管理工具。如果项目中有10000个或更多的java文件,而你试图用 "maven clean install "来构建该项目,则构建失败,出现错误 -java.lang.OutOfMemoryError

maven clean install会尝试清理/删除项目并编译项目,并测试项目和构建应用程序。

OutOfMemoryError问题要么发生在项目的compile 阶段,要么发生在构建maven项目时的test 阶段
对于test 案例的执行,maven使用surefire-plugin 。在这两种情况下,你都有一个堆,可以通过多种方式增加堆大小。

实际上OutOfMemoryError 错误日志给出了额外的信息,如下图所示

java.lang.OutOfMemoryError: Java heap space  

要解决这个错误,java.lang.OutOfMemoryError。Java heap space Java heap space意味着在maven项目的堆内存中没有足够的空间来分配你的对象执行。

java.lang.OutOfMemoryError: Perm Gen space  

Perm Gen space是一个与java中的类加载错误有关的错误。这个错误发生在类加载器加载类的过程中,当你的应用程序在执行结束后仍然保持着对类的引用,我们称之为内存泄漏,所以当maven发生这个错误时,你必须使用系统的类加载器。

为了调试确切的原因,请使用maven -x clean install 命令,它能给出确切的根源,并提供详细的附加日志堆栈跟踪。

首先,你必须找出这个错误发生在哪个阶段 ,如果错误是在编译时发生的,你必须根据你的系统容量增加堆的大小,如Linux和windows下的以下几行代码。

修复windows下maven的OutOfMemoryError:-

改变环境变量MAVEN\_OPTS ,通过以下代码增加堆的大小。

set MAVEN_OPTS=-Xmx768M -XX:MaxPermSize=768M  

修复Linux/Unix下maven的OutOfMemoryError:--增加环境变量 的堆大小

增加环境变量MAVEN\_OPTS 的堆大小,对Linux版本的处理是不同的。

export MAVEN_OPTS=-Xmx768M -XX:MaxPermSize=768M  

大多数情况下,OutOfMemoryError ,通过以上几行代码就能解决,如果不能解决,就按照以下方法处理

maven中的maven-surefire-plugin的问题:

如前所述,surefire 插件使用不同的机制加载类,我们将通过以下方法指示该插件使用system classloader

<configuration>  
          <usesystemclassloader>false</usesystemclassloader>  
    <forkmode>never</forkmode>  
        </configuration>  
          

你也可以用configuration 选项增加插件的堆大小。argLine


<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.22.2</version>
        <configuration>
            <argLine>-Xmx1024m</argLine>
        </configuration>
      </plugin>
    </plugins>
  </build>
  

以下命令更有助于调试你的应用程序,以运行你的项目

maven -x  
mvn  -Dmaven.surefire.debug  

希望你对解决maven在windows、Linux和Unix环境下的OutOfMemoryError问题有了想法。

如果您有什么要分享的,请随时评论。