A partir de hoy, mi compilación de 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] Memoria insuficiente; para aumentar la cantidad de memoria, use el indicador -Xmx al inicio (java -Xmx128M ...)
A partir de ayer, había ejecutado con éxito una compilación de maven.
A partir de hoy, he aumentado mi montón a 3 GB . Además, solo cambié 2-3 líneas menores de código, por lo que no entiendo este error de "memoria insuficiente".
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 obtuve el mismo error de compilación de 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>
maven
out-of-memory
maven-3
pom.xml
maven-compiler-plugin
Kevin Meredith
fuente
fuente
-Xmx
.Respuestas:
¿De qué tipo de módulo 'web' estás hablando? ¿Es una guerra simple y tiene tipo de empaque guerra?
Si no está utilizando el kit de herramientas web de Google (GWT), no necesita proporcionar ninguna
gwt.extraJvmArgs
Bifurcar el proceso de compilación puede no ser la mejor idea, porque inicia un segundo proceso que ignora por
MAVEN_OPTS
completo, lo que dificulta el análisis.Entonces intentaría aumentar el Xmx configurando MAVEN_OPTS
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>
El aumento
-XX:MaxPermSize=512m
no debería ser necesario porque si el tamaño de la permanente es la razón del problema, entonces esperaría el errorjava.lang.OutOfMemoryError: PermGen space
Si eso no resuelve su problema, puede crear volcados de pila para un análisis más detallado agregando
-XX:+HeapDumpOnOutOfMemoryError
. Además, puede usar jconsole.exe en su directorio bin de java para conectarse a jvm mientras se ejecuta la compilación y ver qué está pasando dentro del montón de jvm.Otra idea (puede ser estúpida) que se me ocurrió, ¿tiene suficiente RAM dentro de su máquina? Definir el tamaño de la memoria es bueno, pero si su host tiene solo 4GB y luego puede tener el problema de que Java no puede usar la memoria definida porque ya la usa el sistema operativo, Java, MS-Office ...
fuente
Respondiendo tarde para mencionar otra opción en lugar de la
MAVEN_OPTS
variable de entorno común para pasar a la compilación de Maven las opciones de JVM requeridas.Desde Maven 3.3.1 , puede tener una
.mvn
carpeta como parte del proyecto en cuestión y unjvm.config
archivo como lugar perfecto para dicha opción.Como parte de las notas de la versión oficial
La principal ventaja de este enfoque es que la configuración está aislada del proyecto en cuestión y se aplica a toda la compilación también, y es menos frágil que
MAVEN_OPTS
para otros desarrolladores que trabajan en el mismo proyecto (olvidándose de configurarlo).Además, las opciones se aplicarán a todos los módulos en caso de un proyecto de varios módulos.
fuente
Tengo el mismo problema al intentar compilar una "instalación limpia" usando un VPS de RAM de 512 Mb Lowend y una buena CPU. Ejecute OutOfMemory y eliminó el script repetidamente.
Usé
export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=350m"
y trabajé.Todavía tengo algún otro error de compilación porque es la primera vez que necesito Maven, pero el problema de OutOfMemory ha desaparecido.
fuente
Agregar opción
a MAVEN_OPTS
maven-compiler-plugin
opciones<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>
fuente
maven-compilier-plugin
y aumente-XX:MaxPermSize
,Xmx
debería ser =XX:MaxPermSize
maven-compilier-plugin
Tuve el mismo problema al compilar Druid.io, aumentando MaxDirectMemorySize finalmente funcionó.
fuente
Esta siguiente configuració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>
Intente utilizar -XX: MaxPermSize en lugar de -XX: MaxPermGen
fuente
fuente
¿En qué tipo de sistema operativo estás ejecutando?
Para asignar más de 2 GB de RAM, debe ser al menos un sistema operativo de 64 bits.
Luego hay otro problema. Incluso si su sistema operativo tiene RAM ilimitada, pero está fragmentada de tal manera que no hay un solo bloque libre de 2GB disponible, también se quedará sin excepciones de memoria. Y tenga en cuenta que la memoria Heap normal es solo una parte de la memoria que usa el proceso de VM. Por lo tanto, en una máquina de 32 bits, probablemente nunca podrá configurar Xmx en 2048 MB.
También sugeriría establecer un mínimo y un máximo de memoria en el mismo valor, porque en este caso, tan pronto como la VM se quede sin memoria, el primer tiempo se asigna 1GB desde el principio, la VM luego asigna un nuevo bloque (asumiendo que aumenta con 500 MB de bloques) de 1,5 GB después de que se asignen, copiará todas las cosas del bloque uno al nuevo y liberará la memoria después de eso. Si se vuelve a quedar sin memoria, se asignan 2GB y luego se copian los 1,5 GB, asignando temporalmente 3,5GB de memoria.
fuente
Mientras crea el proyecto en la plataforma Unix / Linux, configure la sintaxis de las opciones de Maven como se muestra a continuación. Tenga en cuenta que los signos de una sola pregunta, no una doble cita.
fuente
El uso de .mvn / jvm.config funcionó para mí y tiene el beneficio adicional de estar vinculado con el proyecto.
fuente
Esto sucede en grandes proyectos en Windows cuando se usa cygwin u otro emulador de Linux (git bash). Por alguna coincidencia, ambos no funcionan en mi proyecto, lo que es un gran proyecto de código abierto. En un script sh, se llaman a un par de comandos mvn. El tamaño de la memoria crece hasta un tamaño de pila mayor que el especificado en Xmx y la mayoría de las veces, en un caso, se inicia el segundo proceso de Windows. Esto hace que el consumo de memoria sea aún mayor.
La solución en este caso es usar un archivo por lotes y un tamaño Xmx reducido y luego las operaciones de maven son exitosas. Si hay interés puedo revelar más detalles.
fuente
Alguien ya ha mencionado el problema con el sistema operativo de 32 bits. En mi caso, el problema era que estaba compilando con JDK de 32 bits.
fuente
El aumento del tamaño de la memoria en la variable de entorno 'MAVEN_OPTS' ayudará a resolver este problema. Para mí, el aumento de -Xmx756M a -Xmx1024M funcionó.
fuente