java.lang.OutOfMemoryError: espace de tas Java dans Maven

123

Lorsque j'exécute le test maven, java.lang.OutOfMemoryError se produit. Je cherche des solutions sur Google et j'ai essayé deexport MAVEN_OPTS=-Xmx1024m , mais cela n'a pas fonctionné. Tout le monde connaît d'autres solutions à ce problème, BTW j'utilise maven 3.0

Merci d'avance

Collez le message d'erreur ici lors de l'exécution de "mvn test -e"

Tests échoués:
  avertissement (junit.framework.TestSuite $ 1)
  testDefaultPigJob_1 (com.snda.dw.pig.impl.DefaultPigJobLocalTest)
  testDefaultPigJob_2 (com.snda.dw.pig.impl.DefaultPigJobLocalTest)

Tests exécutés: 11, échecs: 3, erreurs: 0, ignorés: 0

10/11/01 13:37:18 INFO executionengine.HExecutionEngine: Connexion à hadoop fi
le système de fichiers à: file: ///
[INFO] ----------------------------------------------- -------------------------
[INFO] ÉCHEC DE LA CONSTRUCTION
[INFO] ----------------------------------------------- -------------------------
[INFO] Durée totale: 30,063 s
[INFO] Terminé à: Mon Nov 01 13:37:18 PDT 2010
[INFO] Mémoire finale: 3M / 6M
[INFO] ----------------------------------------------- -------------------------
[ERREUR] Échec de l'exécution de l'objectif org.apache.maven.plugins: maven-surefire-plugin: 2.
5: test (test par défaut) sur le projet dw.pig: Il y a des échecs de test.
[ERREUR]
[ERREUR] Veuillez vous référer à E: \ Code \ Java \ workspace \ dw.pig \ target \ surefire-reports fo
r les résultats des tests individuels.
[ERREUR] -> [Aide 1]
org.apache.maven.lifecycle.LifecycleExecutionException: échec de l'exécution de l'objectif o
rg.apache.maven.plugins: maven-surefire-plugin: 2.5: test (test par défaut) sur le projet
 dw.pig: Il y a des échecs de test.

Veuillez vous référer à E: \ Code \ Java \ workspace \ dw.pig \ target \ surefire-reports pour le in
résultats des tests individuels.
        à org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor
.java: 199)
        à org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor
.java: 148)
        à org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor
.java: 140)
        à org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje
ct (LifecycleModuleBuilder.java:84)
        à org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProje
ct (LifecycleModuleBuilder.java:59)
        à org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBu
ild (LifecycleStarter.java:183)
        à org.apache.maven.lifecycle.internal.LifecycleStarter.execute (Lifecycl
eStarter.java:161)
        à org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:314)
        à org.apache.maven.DefaultMaven.execute (DefaultMaven.java:151)
        à org.apache.maven.cli.MavenCli.execute (MavenCli.java:445)
        à org.apache.maven.cli.MavenCli.doMain (MavenCli.java:168)
        à org.apache.maven.cli.MavenCli.main (MavenCli.java:132)
        à sun.reflect.NativeMethodAccessorImpl.invoke0 (méthode native)
        à sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.
java: 39)
        à sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAcces
sorImpl.java:25)
        à java.lang.reflect.Method.invoke (Method.java:597)
        à org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Laun
cher.java:290)
        à org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.jav
un: 230)
        à org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (La
uncher.java:409)
        à org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:
352)
Causé par: org.apache.maven.plugin.MojoFailureException: il y a des échecs de test
.

Veuillez vous référer à E: \ Code \ Java \ workspace \ dw.pig \ target \ surefire-reports pour le in
résultats des tests individuels.
        à org.apache.maven.plugin.surefire.SurefirePlugin.execute (SurefirePlugi
n.java:629)
        à org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (par défaut
BuildPluginManager.java:107)
        à org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor
.java: 195)
        ... 19 plus
[ERREUR]
[ERREUR] Réexécutez Maven en utilisant le commutateur -X pour activer la journalisation complète du débogage.
[ERREUR]
[ERROR] Pour plus d'informations sur les erreurs et les solutions possibles, veuillez consulter
d les articles suivants:
[ERREUR] [Aide 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureExc
zjffdu
la source
Peut-être avez-vous une fuite de mémoire dans votre test? Malgré le ramassage des ordures, vous pouvez toujours créer une fuite de mémoire dans java: ibm.com/developerworks/library/j-leaks
anio

Réponses:

158

Lorsque j'exécute le test maven, java.lang.OutOfMemoryError se produit. Je cherche des solutions sur Google et j'ai essayé d'exporter MAVEN_OPTS = -Xmx1024m, mais cela n'a pas fonctionné.

La configuration des Xmxoptions à l'aide de MAVEN_OPTSne fonctionne pas, elle configure la JVM utilisée pour démarrer Maven. Cela étant dit, le plugin maven-surefire-plugin forge une nouvelle JVM par défaut, et vous MAVEN_OPTSn'êtes donc pas passé.

Pour configurer le dimensionnement de la JVM utilisée par le plugin maven-surefire, il faudrait soit:

  • changez le forkModeen never(ce qui n'est pas une très bonne idée car Maven ne sera pas isolé du test) ~ ou ~
  • utilisez le argLineparamètre (dans le bon sens):

Dans le dernier cas, quelque chose comme ceci:

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

Mais je dois dire que j'ai tendance à être d'accord avec Stephen ici, il y a très probablement quelque chose qui ne va pas avec l'un de vos tests et je ne suis pas sûr que donner plus de mémoire soit la bonne solution pour «résoudre» (cacher?) Votre problème.

Références

Pascal Thivent
la source
1
Mettez-vous à jour la balise <configuration> uniquement dans votre pom.xml parent?
Kevin Meredith
3
forkModeest obsolète: maven.apache.org/surefire/maven-surefire-plugin/…
Macarse
1
@Macarse forkModeest obsolète, mais je pense qu'il ne doit être remplacé que par forkCountce qui a des fonctionnalités similaires. Une façon d'utiliser MAVEN_OPTS est, <argLine>${env.MAVEN_OPTS}</argLine>mais ce n'est apparemment pas recommandé car cela peut varier d'un ordinateur à l'autre ( stackoverflow.com/a/10463133/32453 ). Notez également que si vous utilisez jacoco, vous êtes censé définir argLine d'une manière différente stackoverflow.com/questions/12269558/maven-jacoco-plugin-error
rogerdpack
63

Pour ceux qui découvrent Maven (comme moi), voici toute la configuration qui va dans la section build de votre pom. À votre santé.

<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>
utilisateur738048
la source
12

Il est fort probable que le problème se situe dans l'un des tests unitaires que vous avez demandé à Maven d'exécuter.

En tant que tel, manipuler la taille du tas est la mauvaise approche. Au lieu de cela, vous devriez regarder le test unitaire qui a provoqué l'OOME et essayer de déterminer s'il s'agit de la faute du test unitaire ou du code qu'il teste.

Commencez par regarder la trace de la pile. S'il n'y en a pas, exécutez à mvn ... testnouveau avec l' -eoption.

Stephen C
la source
@ Stephen, je peux passer le cas de test dans eclipse après avoir défini-Xmx1024m dans la configuration d'exécution, mais il lance toujours OutOfMemoryError lorsque j'exécute "mvn test" dans la console, même lorsque j'ajoute -e options "mvn test -DMAVEN_OPTS = -Xmx1024m "
zjffdu
2
@zjffdu - Vous avez complètement raté mon point! Le but de l'ajout de "-e" n'est pas de faire fonctionner les tests. C'est pour découvrir pourquoi ils ne fonctionnent pas.
Stephen C
1
@zjffdu - dans ce cas, vous devrez le déboguer à la dure, comme vous le feriez pour d'autres problèmes Java.
Stephen C
2
J'obtiens ce problème lors de l'exécution de cas de test GWT, qui simulent un environnement de navigateur complet. Parfois, il est acceptable d'augmenter la taille du tas.
djjeck
1
@djjeck - Oui parfois. Mais je ne pense pas que ce soit la bonne solution la plupart du temps.
Stephen C
8

Pour contourner temporairement ce problème, j'ai trouvé que c'était le moyen le plus rapide:

export JAVA_TOOL_OPTIONS="-Xmx1024m -Xms1024m"
Max Hohenegger
la source
6

J'ai résolu ce problème de mon côté de 2 manières:

  1. Ajout de cette configuration dans pom.xml

    <configuration><argLine>-Xmx1024m</argLine></configuration>
  2. Passer au JDK 1.7 utilisé au lieu de 1.6

Minh Dang
la source
2

Afin de résoudre java.lang.OutOfMemoryError: espace de tas Java dans Maven, essayez de configurer la configuration ci-dessous dans 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
la source
1
+1 pour mentionner MaxPermSize. Si votre erreur de mémoire insuffisante est causée par le chargement d'un bazillion de classes comme la création d'un nouveau HiveContext dans votre test unitaire, ceci est votre solution.
swdev
-2

Pas seulement de la mémoire. augmentez également la taille de la perm pour résoudre cette exception dans maven, utilisez ces variables dans la variable d'environnement.

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

Exemple :

export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=500m"
e2rabi
la source
Ensuite, l'erreur ne serait pas "Java heap space", mais différente.
Karl Richter