java.lang.OutOfMemoryError: spazio heap Java in Maven


123

Quando eseguo Maven test, si verifica java.lang.OutOfMemoryError. L'ho cercato su Google per soluzioni e ho provato a farlo export MAVEN_OPTS=-Xmx1024m, ma non ha funzionato. Qualcuno conosce altre soluzioni per questo problema, BTW sto usando Maven 3.0

Grazie in anticipo

Incolla qui il messaggio di errore quando esegui "mvn test -e"

Test falliti:
  warning (junit.framework.TestSuite $ 1)
  testDefaultPigJob_1 (com.snda.dw.pig.impl.DefaultPigJobLocalTest)
  testDefaultPigJob_2 (com.snda.dw.pig.impl.DefaultPigJobLocalTest)

Test eseguiti: 11, Errori: 3, Errori: 0, Ignorato: 0

10/11/01 13:37:18 INFO executionengine.HExecutionEngine: Collegamento a hadoop fi
le system in: file: ///
[INFORMAZIONI] ----------------------------------------------- -------------------------
[INFO] BUILD FAILURE
[INFORMAZIONI] ----------------------------------------------- -------------------------
[INFO] Tempo totale: 30.063 s
[INFO] Terminato alle: Mon Nov 01 13:37:18 PDT 2010
[INFO] Memoria finale: 3M / 6M
[INFORMAZIONI] ----------------------------------------------- -------------------------
[ERRORE] Impossibile eseguire l'obiettivo org.apache.maven.plugins: maven-surefire-plugin: 2.
5: test (default-test) sul progetto dw.pig: ci sono errori di test.
[ERRORE]
[ERRORE] Fare riferimento a E: \ Code \ Java \ workspace \ dw.pig \ target \ surefire-reports fo
r i risultati dei singoli test.
[ERRORE] -> [Aiuto 1]
org.apache.maven.lifecycle.LifecycleExecutionException: impossibile eseguire l'obiettivo o
rg.apache.maven.plugins: maven-surefire-plugin: 2.5: test (default-test) sul progetto
 dw.pig: ci sono errori di test.

Fare riferimento a E: \ Code \ Java \ workspace \ dw.pig \ target \ surefire-reports per
risultati dei singoli test.
        in org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor
.java: 199)
        in org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor
.java: 148)
        in org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor
.java: 140)
        su org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje
ct (LifecycleModuleBuilder.java:84)
        su org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje
ct (LifecycleModuleBuilder.java:59)
        su org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBu
ILD (LifecycleStarter.java:183)
        in org.apache.maven.lifecycle.internal.LifecycleStarter.execute (Lifecycl
eStarter.java:161)
        in org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:314)
        in org.apache.maven.DefaultMaven.execute (DefaultMaven.java:151)
        su org.apache.maven.cli.MavenCli.execute (MavenCli.java:445)
        su org.apache.maven.cli.MavenCli.doMain (MavenCli.java:168)
        su org.apache.maven.cli.MavenCli.main (MavenCli.java:132)
        su sun.reflect.NativeMethodAccessorImpl.invoke0 (metodo nativo)
        in sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.
java: 39)
        su sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAcces
sorImpl.java:25)
        in java.lang.reflect.Method.invoke (Method.java:597)
        presso org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Laun
cher.java:290)
        su org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.jav
un: 230)
        presso org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (La
uncher.java:409)
        su org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:
352)
Causato da: org.apache.maven.plugin.MojoFailureException: ci sono errori di test
.

Fare riferimento a E: \ Code \ Java \ workspace \ dw.pig \ target \ surefire-reports per
risultati dei singoli test.
        su org.apache.maven.plugin.surefire.SurefirePlugin.execute (SurefirePlugi
n.java:629)
        in org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (predefinito
BuildPluginManager.java:107)
        in org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor
.java: 195)
        ... 19 di più
[ERRORE]
[ERRORE] Riesegui Maven utilizzando l'opzione -X per abilitare la registrazione completa del debug.
[ERRORE]
[ERRORE] Per ulteriori informazioni sugli errori e le possibili soluzioni, rea
d i seguenti articoli:
[ERRORE] [Aiuto 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureExc

Forse hai una perdita di memoria nel tuo test? Nonostante si
tratti di Garbage Collection

Risposte:


158

Quando eseguo Maven test, si verifica java.lang.OutOfMemoryError. Ho cercato soluzioni su Google e ho provato a esportare MAVEN_OPTS = -Xmx1024m, ma non ha funzionato.

L'impostazione delle Xmxopzioni utilizzando MAVEN_OPTSfunziona, configura la JVM utilizzata per avviare Maven. Detto questo, il plug-in maven-infallibile crea una nuova JVM per impostazione predefinita, e quindi il tuo MAVEN_OPTSnon viene superato.

Per configurare il dimensionamento della JVM utilizzata dal plug-in maven-surefire, dovresti:

  • cambia forkModein never(che non è un'idea così buona perché Maven non sarà isolato dal test) ~ o ~
  • usa il argLineparametro (nel modo giusto):

Nell'ultimo caso, qualcosa del genere:

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

Ma devo dire che tendo ad essere d'accordo con Stefano qui, molto probabilmente c'è qualcosa che non va in uno dei tuoi test e non sono sicuro che dare più memoria sia la soluzione giusta per "risolvere" (nascondere?) Il tuo problema.

Riferimenti


1
Aggiornate il tag <configuration> solo all'interno del vostro genitore pom.xml?
Kevin Meredith,


1
@Macarse forkModeè stato deprecato, ma penso solo per essere sostituito con il forkCountquale ha funzionalità simili. Un modo in cui potresti usare MAVEN_OPTS è, <argLine>${env.MAVEN_OPTS}</argLine>ma apparentemente non è raccomandato poiché può variare da computer a computer ( stackoverflow.com/a/10463133/32453 ). Si noti inoltre che se si sta utilizzando jacoco si suppone di argLine insieme un diverso modo stackoverflow.com/questions/12269558/maven-jacoco-plugin-error
rogerdpack

63

Per i nuovi di Maven (come me) ecco l'intera configurazione che va nella sezione build del tuo pom. Saluti.

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

12

È probabile che il problema sia in uno degli unit test che hai chiesto a Maven di eseguire.

In quanto tale, armeggiare con le dimensioni dell'heap è l'approccio sbagliato. Invece, dovresti guardare lo unit test che ha causato l'OOME e cercare di capire se è colpa dello unit test o del codice che sta testando.

Inizia guardando la traccia dello stack. Se non ce n'è uno, esegui di mvn ... testnuovo con l' -eopzione.


@ Stephen, posso superare il test case in eclipse dopo aver impostato-Xmx1024m nella configurazione di esecuzione, ma genera sempre OutOfMemoryError quando eseguo "mvn test" nella console, anche quando aggiungo -e opzioni "mvn test -DMAVEN_OPTS = -Xmx1024m "
zjffdu

2
@zjffdu - Hai completamente perso il mio punto! Lo scopo dell'aggiunta di "-e" non è far funzionare i test. È per scoprire perché non funzionano.
Stephen C

1
@zjffdu - in tal caso, dovrai eseguire il debug di questo nel modo più difficile, come faresti con altri problemi Java.
Stephen C

2
Ho questo problema durante l'esecuzione di casi di test GWT, che simulano un ambiente browser completo. A volte va bene aumentare la dimensione dell'heap.
djjeck

1
@djjeck - Sì a volte. Ma non credo che sia la soluzione giusta il più delle volte.
Stephen C

8

Per aggirare temporaneamente questo problema, ho riscontrato che il modo più rapido è il seguente:

export JAVA_TOOL_OPTIONS="-Xmx1024m -Xms1024m"

6

Ho risolto questo problema da parte mia in 2 modi:

  1. Aggiungendo questa configurazione in pom.xml

    <configuration><argLine>-Xmx1024m</argLine></configuration>
  2. Passa a JDK 1.7 invece di 1.6


2

Per risolvere java.lang.OutOfMemoryError: Java heap space in Maven, prova a configurare la configurazione sottostante in 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>

1
+1 per aver menzionato MaxPermSize. Se l'errore di memoria insufficiente è causato dal caricamento di un miliardo di classi come la creazione di un nuovo HiveContext nel tuo unit test, questa è la soluzione.
swdev

-2

Non solo accumulo di memoria. aumentare anche la dimensione del perm per risolvere quell'eccezione in Maven usa queste variabili nella variabile d'ambiente.

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

Esempio :

export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=500m"

Quindi l'errore non sarebbe "spazio heap Java", ma diverso.
Karl Richter
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.