首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存不足构建失败

内存不足构建失败
EN

Stack Overflow用户
提问于 2012-09-19 16:13:18
回答 15查看 261.1K关注 0票数 96

到今天为止,我的maven编译失败了。

代码语言:javascript
复制
[INFO] [ERROR] Unexpected
[INFO] java.lang.OutOfMemoryError: Java heap space
[INFO]  at java.util.Arrays.copyOfRange(Arrays.java:2694)
[INFO]  at java.lang.String.<init>(String.java:203)
[INFO]  at java.lang.String.substring(String.java:1877)

内存不足;若要增加内存量,请在启动时使用-Xmx标志(java -Xmx128M .)

到昨天为止,我已经成功地运行了一个maven编译。

从今天起,我的堆就堆到了3 GB的上。另外,我只修改了2-3行代码,所以我不理解这个“内存不足”错误。

代码语言:javascript
复制
vagrant@dev:/vagrant/workspace$ echo $MAVEN_OPTS
-Xms1024m -Xmx3000m -Dmaven.surefire.debug=-Xmx3000m

编辑:通过更改失败模块的pom.xml,我尝试了海报的注释。但我也遇到了同样的maven构建错误。

代码语言:javascript
复制
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.5</source>
            <target>1.5</target>
            <fork>true</fork>
            <meminitial>1024m</meminitial>
            <maxmem>2024m</maxmem>
       </configuration>
    </plugin>
EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2012-09-22 12:56:51

你说的是什么样的“网络”模块?这是一个简单的战争和包装类型的战争?

如果您没有使用谷歌的网络工具包,那么您就不需要提供任何gwt.extraJvmArgs

分叉编译过程可能不是最好的主意,因为它启动了第二个完全忽略MAVEN_OPTS的进程,从而使分析变得更加困难。

因此,我会尝试通过设置MAVEN_OPTS来增加Xmx

代码语言:javascript
复制
export MAVEN_OPTS="-Xmx3000m"

也不要将编译器发送到不同的进程

代码语言:javascript
复制
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.5</source>
        <target>1.5</target>
   </configuration>
</plugin>

不应该增加-XX:MaxPermSize=512m,因为如果perm大小是问题的原因,那么我将期望错误java.lang.OutOfMemoryError: PermGen space

如果这不能解决您的问题,那么您可以通过添加-XX:+HeapDumpOnOutOfMemoryError来创建堆转储以供进一步分析。此外,您可以在编译运行时使用java bin目录中的jconsole.exe连接到jvm,并查看jvm堆中发生了什么。

另一个想法(可能是一个愚蠢的想法)出现在我这里,你的机器里有足够的内存吗?定义内存大小是很好的,但是如果您的主机只有4GB,那么您可能会遇到这样的问题: Java无法使用定义的内存,因为它已经被操作系统、Java、MS-Office使用.

票数 147
EN

Stack Overflow用户

发布于 2016-03-14 21:50:25

稍后回答时提到另一个选项,而不是传递给Maven的通用MAVEN_OPTS环境变量,以构建所需的JVM选项。

由于Maven 3.3.1,您可以将一个.mvn文件夹作为相关项目的一部分,并将一个jvm.config文件作为这样一个选项的最佳位置。

两个新的可选配置文件.mvn/jvm.config.mvn/maven.config,位于项目源代码树的基目录下。如果存在,这些文件将提供默认jvm和maven选项。因为这些文件是项目源树的一部分,所以它们将出现在所有项目签出中,并且在每次生成项目时都会自动使用。

作为官方发布说明的一部分

在Maven中,在每个项目基础上定义JVM配置并不简单。基于环境变量MAVEN_OPTS和使用${user.home}/.mavenrc的现有机制是另一个选项,其缺点是不属于项目的一部分。 从这个版本开始,您可以通过${maven.projectBasedir}/.mvn/jvm.config文件定义JVM配置,这意味着您可以在每个项目基础上定义构建选项。此文件将成为您的项目的一部分,并将与您的项目一起签入。所以不再需要MAVEN_OPTS.mavenrc文件了。因此,例如,如果将以下JVM选项放入${maven.projectBasedir}/.mvn/jvm.config文件中: -Xmx2048m -Xms1024m -XX:MaxPermSize=512m -Djava.awt.headless=true

这种方法的主要优点是,配置与相关项目隔离,并应用于整个构建,对于在同一项目上工作的其他开发人员(忘记设置该配置)而言,该配置比MAVEN_OPTS更不脆弱。

此外,这些选项将适用于所有模块的情况下,一个多模块项目.

票数 44
EN

Stack Overflow用户

发布于 2015-01-19 06:06:22

我在使用Lowend512 to内存VPS和良好的CPU编译“清洁安装”时也遇到了同样的问题。重复运行OutOfMemory并杀死脚本。

我使用export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=350m"并工作。

由于这是我第一次需要Maven,所以仍然会出现其他编译失败,但是OutOfMemory问题已经解决。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12498738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档