java.lang.OutOfMemoryError: espacio de almacenamiento dinámico Java en Maven

122

Cuando ejecuto la prueba de Maven, sucede java.lang.OutOfMemoryError. Lo busqué en Google y lo intenté export MAVEN_OPTS=-Xmx1024m, pero no funcionó. Alguien sabe otras soluciones para este problema, por cierto estoy usando maven 3.0

Gracias por adelantado

Pegue el mensaje de error aquí cuando ejecute "mvn test -e"

Pruebas fallidas:
  advertencia (junit.framework.TestSuite $ 1)
  testDefaultPigJob_1 (com.snda.dw.pig.impl.DefaultPigJobLocalTest)
  testDefaultPigJob_2 (com.snda.dw.pig.impl.DefaultPigJobLocalTest)

Pruebas realizadas: 11, Fallos: 3, Errores: 0, Saltado: 0

10/11/01 13:37:18 INFOcutionengine.HExecutionEngine: Conexión a hadoop fi
sistema de archivos en: archivo: ///
[INFO] ----------------------------------------------- -------------------------
[INFO] FALLO DE CONSTRUCCIÓN
[INFO] ----------------------------------------------- -------------------------
[INFO] Tiempo total: 30.063s
[INFO] Terminado en: Lun Nov 01 13:37:18 PDT 2010
[INFO] Memoria final: 3M / 6M
[INFO] ----------------------------------------------- -------------------------
[ERROR] Error al ejecutar el objetivo org.apache.maven.plugins: maven-surefire-plugin: 2.
5: prueba (prueba predeterminada) en el proyecto dw.pig: hay fallas de prueba.
[ERROR]
[ERROR] Consulte E: \ Code \ Java \ workspace \ dw.pig \ target \ surefire-reports fo
r los resultados de las pruebas individuales.
[ERROR] -> [Ayuda 1]
org.apache.maven.lifecycle.LifecycleExecutionException: no se pudo ejecutar el objetivo o
rg.apache.maven.plugins: maven-surefire-plugin: 2.5: prueba (prueba predeterminada) en el proyecto
 dw.pig: hay fallas de prueba.

Consulte E: \ Code \ Java \ workspace \ dw.pig \ target \ surefire-reports para el en
Resultados de la prueba individual.
        en org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor
.java: 199)
        en org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor
.java: 148)
        en org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor
.java: 140)
        en org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje
ct (LifecycleModuleBuilder.java:84)
        en org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje
ct (LifecycleModuleBuilder.java:59)
        en org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBu
ild (LifecycleStarter.java:183)
        en org.apache.maven.lifecycle.internal.LifecycleStarter.execute (Lifecycl
eStarter.java:161)
        en org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:314)
        en org.apache.maven.DefaultMaven.execute (DefaultMaven.java:151)
        en org.apache.maven.cli.MavenCli.execute (MavenCli.java:445)
        en org.apache.maven.cli.MavenCli.doMain (MavenCli.java:168)
        en org.apache.maven.cli.MavenCli.main (MavenCli.java:132)
        en sun.reflect.NativeMethodAccessorImpl.invoke0 (Método nativo)
        en sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.
java: 39)
        en sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAcces
sorImpl.java:25)
        en java.lang.reflect.Method.invoke (Method.java:597)
        en org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher
cher.java:290)
        en org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.jav
a: 230)
        en org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (La
uncher.java:409)
        en org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:
352)
Causado por: org.apache.maven.plugin.MojoFailureException: hay fallas de prueba
.

Consulte E: \ Code \ Java \ workspace \ dw.pig \ target \ surefire-reports para el en
Resultados de la prueba individual.
        en org.apache.maven.plugin.surefire.SurefirePlugin.execute (SurefirePlugi
n.java:629)
        en org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (predeterminado
BuildPluginManager.java:107)
        en org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor
.java: 195)
        ... 19 más
[ERROR]
[ERROR] Vuelva a ejecutar Maven con el modificador -X para habilitar el registro de depuración completo.
[ERROR]
[ERROR] Para obtener más información sobre los errores y las posibles soluciones, consulte
d los siguientes artículos:
[ERROR] [Ayuda 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureExc
zjffdu
fuente
¿Quizás tiene una pérdida de memoria en su prueba? A pesar de ser basura recolectada, aún puede crear una pérdida de memoria en Java: ibm.com/developerworks/library/j-leaks
anio

Respuestas:

158

Cuando ejecuto la prueba de Maven, sucede java.lang.OutOfMemoryError. Lo busqué en Google para buscar soluciones y he intentado exportar MAVEN_OPTS = -Xmx1024m, pero no funcionó.

Establecer las Xmxopciones usando MAVEN_OPTSfunciona, configura la JVM utilizada para iniciar Maven. Dicho esto, el complemento maven-surefire bifurca una nueva JVM de forma predeterminada, por MAVEN_OPTSlo que no se pasa.

Para configurar el tamaño de la JVM utilizada por el complemento maven-surefire, deberá:

  • cambie el forkModea never(que no es una buena idea porque Maven no estará aislado de la prueba) ~ o ~
  • use el argLineparámetro (de la manera correcta):

En el caso posterior, algo como esto:

<configuration>
  <argLine>-Xmx1024m</argLine>
</configuration>

Pero tengo que decir que tiendo a estar de acuerdo con Stephen aquí, es muy probable que haya algo mal con una de sus pruebas y no estoy seguro de que dar más memoria sea la solución correcta para "resolver" (¿ocultar?) Su problema.

Referencias

Pascal Thivent
fuente
1
¿Actualiza la etiqueta <configuration> solo dentro de su pom.xml padre?
Kevin Meredith
3
forkModeha quedado en desuso: maven.apache.org/surefire/maven-surefire-plugin/…
Macarse
1
@Macarse forkModeha quedado en desuso, pero creo que solo debe ser reemplazado por uno forkCountque tenga una funcionalidad similar. Una forma de usar MAVEN_OPTS es <argLine>${env.MAVEN_OPTS}</argLine>que aparentemente no es recomendable, ya que puede variar de una computadora a otra ( stackoverflow.com/a/10463133/32453 ). También tenga en cuenta que si está usando jacoco se supone que debe configurar argLine de una manera diferente stackoverflow.com/questions/12269558/maven-jacoco-plugin-error
rogerdpack
63

Para aquellos nuevos en Maven (como yo), aquí está toda la configuración que va en la sección de compilación de su pom. Salud.

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.19</version>
        <configuration>
            <argLine>-Xmx1024m</argLine>
        </configuration>
      </plugin>
    </plugins>
  </build>
usuario738048
fuente
12

Lo más probable es que el problema esté en una de las pruebas unitarias que le ha pedido a Maven que ejecute.

Como tal, jugar con el tamaño del montón es el enfoque incorrecto. En su lugar, debe mirar la prueba de la unidad que ha causado el OOME e intentar averiguar si es culpa de la prueba de la unidad o del código que está probando.

Comience mirando el rastro de la pila. Si no hay uno, mvn ... testvuelva a ejecutar con la -eopción.

Stephen C
fuente
@ Stephen, puedo pasar el caso de prueba en eclipse después de establecer-Xmx1024m en la configuración de ejecución, pero siempre arroja OutOfMemoryError cuando ejecuto "mvn test" en la consola, incluso cuando agrego -e opciones "mvn test -DMAVEN_OPTS = -Xmx1024m "
zjffdu
2
@zjffdu - ¡Te perdiste completamente mi punto! El propósito de agregar "-e" no es hacer que las pruebas funcionen. Es para descubrir por qué no funcionan.
Stephen C
1
@zjffdu: en ese caso, deberá depurar esto de la manera difícil, como lo haría con otros problemas de Java.
Stephen C
2
Tengo este problema al ejecutar casos de prueba GWT, que simulan un entorno de navegador completo. A veces está bien aumentar el tamaño del montón.
djjeck
1
@djjeck: sí, a veces. Pero no creo que sea la solución correcta la mayor parte del tiempo.
Stephen C
8

Para solucionar temporalmente este problema, descubrí que lo siguiente es la forma más rápida:

export JAVA_TOOL_OPTIONS="-Xmx1024m -Xms1024m"
Max Hohenegger
fuente
6

He resuelto este problema de mi lado de 2 maneras:

  1. Agregar esta configuración en pom.xml

    <configuration><argLine>-Xmx1024m</argLine></configuration>
  2. Cambie a JDK 1.7 usado en lugar de 1.6

Minh Dang
fuente
2

Para resolver java.lang.OutOfMemoryError: espacio de almacenamiento dinámico Java en Maven, intente configurar la configuración siguiente en pom

<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>
Narayan Yerrabachu
fuente
1
+1 por mencionar MaxPermSize. Si su error de falta de memoria es causado por cargar un bazillion de clases como crear un nuevo HiveContext en su prueba unitaria, esta es su solución.
swdev
-2

No solo memoria de montón. También aumente el tamaño de la permanente para resolver esa excepción en Maven. Utilice estas variables en la variable de entorno.

variable name: MAVEN_OPTS
variable value: -Xmx512m -XX:MaxPermSize=256m

Ejemplo:

export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=500m"
e2rabi
fuente
Entonces el error no sería "espacio de almacenamiento dinámico de Java", sino diferente.
Karl Richter