maven out-of-memory maven-3 pom.xml maven-compiler-plugin

hibernate annotations maven



Maven Out of Memory Build Failure (8)

¿De qué tipo de módulo ''web'' estás hablando? ¿Es una guerra simple y tiene guerra de tipo de embalaje?

Si no está utilizando el kit de herramientas web de Google (GWT), entonces no necesita ofrecer ningún gwt.extraJvmArgs

Bifurcar el proceso de compilación puede no ser la mejor idea, porque luego se inicia un segundo proceso que ignora los MAVEN_OPTS y hace el análisis más difícil.

Así que intentaría aumentar Xmx configurando MAVEN_OPTS

export MAVEN_OPTS="-Xmx3000m"

Y no bifurque el compilador a un proceso diferente

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin>

Aumentar -XX:MaxPermSize=512m no debería ser necesario porque si el motivo es el error de la perm, entonces esperaría el error java.lang.OutOfMemoryError: PermGen space

Si eso no resuelve su problema, puede crear volcados de -XX:+HeapDumpOnOutOfMemoryError dinámico para su posterior análisis agregando -XX:+HeapDumpOnOutOfMemoryError . Además, puedes usar jconsole.exe en el directorio bin de tu java para conectarte a jvm mientras se está ejecutando la compilación y ver qué está sucediendo dentro del montón de jvm.

Otra Idea (puede ser estúpida) que se me ocurrió, ¿tienes suficiente RAM dentro de tu máquina? La definición del tamaño de la memoria es agradable, pero si su host tiene solo 4 GB y luego puede tener el problema de que Java no puede usar la memoria definida porque ya está siendo utilizada por el SO, Java, MS-Office ....

A partir de hoy, mi compilación maven falla.

[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)

[ERROR] Sin memoria; para aumentar la cantidad de memoria, use la bandera -Xmx al inicio (java -Xmx128M ...)

A partir de ayer, había ejecutado con éxito una compilación de expertos.

A partir de hoy, acabo de subir mi montón a 3 GB . Además, solo cambié dos o tres líneas menores de código, por lo que no entiendo este error de "falta de memoria".

vagrant@dev:/vagrant/workspace$ echo $MAVEN_OPTS -Xms1024m -Xmx3000m -Dmaven.surefire.debug=-Xmx3000m

EDITAR: Probé el comentario del póster cambiando el pom.xml de mi módulo fallido. Pero tengo el mismo error de compilación maven.

<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 qué tipo de sistema operativo se está ejecutando?

Para asignar más de 2 GB de RAM, necesita tener al menos un sistema operativo de 64 bits.

Luego hay otro problema. Incluso si su sistema operativo tiene memoria RAM ilimitada, pero está fragmentada de tal manera que no hay un solo bloque libre de 2 GB disponible, también tendrá excepciones de memoria insuficiente. Y tenga en cuenta que la memoria Heap normal es solo parte de la memoria que está usando el proceso de VM. Entonces, en una máquina de 32 bits probablemente nunca podrá configurar Xmx a 2048MB.

También sugiero que se establezca una memoria máxima mínima en el mismo valor, porque en este caso, tan pronto como la máquina virtual se quede sin memoria el primer tiempo 1GB se asigna desde el inicio, la máquina virtual asigna un nuevo bloque (suponiendo que aumente con Bloques de 500MB) de 1,5GB después de asignarlo, copiaría todas las cosas del bloque uno al nuevo y liberaría memoria después de eso. Si se queda sin memoria nuevamente, se asignan los 2 GB y luego se copian los 1,5 GB, asignando temporalmente 3,5 GB de memoria.


Agregar opción

-XX:MaxPermSize=512m

a MAVEN_OPTS

Opciones de maven-compiler-plugin

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <configuration> <fork>true</fork> <meminitial>1024m</meminitial> <maxmem>2024m</maxmem> </configuration> </plugin>


Esta configuración a continuación funciona en mi caso

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>${maven-surefire-plugin.version}</version> <configuration> <verbose>true</verbose> <fork>true</fork> <argLine>-XX:MaxPermSize=500M</argLine> </configuration> </plugin>

Intenta usar -XX: MaxPermSize en lugar de -XX: MaxPermGen


Obtuve el mismo problema al compilar Druid.io, lo que aumentó el MaxDirectMemorySize finalmente funcionó.

export MAVEN_OPTS="-Xms8g -Xmx8g -XX:MaxDirectMemorySize=4096m"


Si responde tarde para mencionar otra opción en lugar de la variable de entorno MAVEN_OPTS común para pasarla a Maven, MAVEN_OPTS las opciones de JVM necesarias.

Desde Maven 3.3.1 , podría tener una carpeta .mvn como parte del proyecto en cuestión y un archivo jvm.config como lugar perfecto para dicha opción.

dos nuevos archivos de configuración opcionales .mvn/jvm.config y .mvn/maven.config , ubicados en el directorio base del árbol fuente del proyecto. Si está presente, estos archivos proporcionarán las opciones predeterminadas de jvm y maven. Debido a que estos archivos son parte del árbol fuente del proyecto, estarán presentes en todas las ejecuciones de proyectos y se usarán automáticamente cada vez que se construya el proyecto.

Como parte de las notas de la versión oficial

En Maven no es simple definir la configuración de JVM en una base por proyecto. El mecanismo existente basado en una variable de entorno MAVEN_OPTS y el uso de ${user.home}/.mavenrc es otra opción con el inconveniente de no ser parte del proyecto.

A partir de este lanzamiento, puede definir la configuración de JVM a través del ${maven.projectBasedir}/.mvn/jvm.config , lo que significa que puede definir las opciones para su compilación en una base por proyecto. Este archivo se convertirá en parte de su proyecto y será registrado junto con su proyecto. Así que ya no es necesario para MAVEN_OPTS , .mavenrc archivos. Por ejemplo, si coloca las siguientes opciones de JVM en el ${maven.projectBasedir}/.mvn/jvm.config :

-Xmx2048m -Xms1024m -XX:MaxPermSize=512m -Djava.awt.headless=true

La principal ventaja de este enfoque es que la configuración está aislada del proyecto en cuestión y se aplica a toda la construcción, y es menos frágil que MAVEN_OPTS para otros desarrolladores que trabajan en el mismo proyecto (olvidando configurarlo).
Además, las opciones se aplicarán a todos los módulos en el caso de un proyecto de varios módulos.


Tengo el mismo problema al tratar de compilar "instalación limpia" usando un VPS ram de Lowend 512Mb y una buena CPU. Ejecute OutOfMemory y elimine el script repetidamente.

Utilicé la export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=350m" y funcionó.

Todavía tengo algún otro error de compilación porque es la primera vez que necesito Maven, pero el problema de OutOfMemory se ha ido.


Usar .mvn / jvm.config funcionó para mí y tiene el beneficio adicional de estar vinculado con el proyecto.