131 votes

Java.lang.OutOfMemoryError: Espace de la pile Java dans Maven

Lorsque je lance maven test, java.lang.OutOfMemoryError se produit. J'ai cherché des solutions sur Google et j'ai essayé de export MAVEN_OPTS=-Xmx1024m, mais cela n'a pas fonctionné. Quelqu'un connaît d'autres solutions à ce problème? J'utilise maven 3.0

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

Tests en échec :
  warning(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 au système de fichiers hadoop sur : file:///
\[INFO\] ------------------------------------------------------------------------
\[INFO\] ÉCHEC DE LA CONSTRUCTION
\[INFO\] ------------------------------------------------------------------------
\[INFO\] Temps total : 30.063s
\[INFO\] Terminé à : lun. 01 nov. 13:37:18 PDT 2010
\[INFO\] Mémoire finale: 3M/6M
\[INFO\] ------------------------------------------------------------------------
\[ERROR\] Impossible d'exécuter la tâche org.apache.maven.plugins:maven-surefire-plugin:2.5:test (default-test) sur le projet dw.pig: Il y a des échecs lors des tests.
\[ERROR\]
\[ERROR\] Veuillez consulter E:\\Code\\Java\\workspace\\dw.pig\\target\\surefire-reports pour les résultats des tests individuels.
\[ERROR\] -> \[Aide 1\]
org.apache.maven.lifecycle.LifecycleExecutionException: Impossible d'exécuter la tâche org.apache.maven.plugins:maven-surefire-plugin:2.5:test (default-test) sur le projet dw.pig: Il y a des échecs lors des tests.

Veuillez consulter E:\\Code\\Java\\workspace\\dw.pig\\target\\surefire-reports pour les 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.buildProject(LifecycleModuleBuilder.java:84)
        à org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
        à org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
        à org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.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(Native Method)
        à sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        à sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        à java.lang.reflect.Method.invoke(Method.java:597)
        à org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
        à org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
        à org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
        à org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Caused by: org.apache.maven.plugin.MojoFailureException: Il y a des échecs lors des tests.

Veuillez consulter E:\\Code\\Java\\workspace\\dw.pig\\target\\surefire-reports pour les résultats des tests individuels.
        at org.apache.maven.plugin.surefire.SurefirePlugin.execute(SurefirePlugin.java:629)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:107)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:195)
        ... 19 more
\[ERROR\]
\[ERROR\] Réexécutez Maven en utilisant l'option -X pour activer les journaux de débogage complets.
\[ERROR\]
\[ERROR\] Pour plus d'informations sur les erreurs et les solutions possibles, veuillez lire les articles suivants :
\[ERROR\] \[Aide 1\] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureExc

0 votes

Peut-être avez-vous une fuite de mémoire dans votre test? Malgré sa collecte par les ordures, vous pouvez toujours créer une fuite de mémoire en java: ibm.com/developerworks/library/j-leaks

168voto

Pascal Thivent Points 295221

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

Configurer les options Xmx en utilisant MAVEN_OPTS fonctionne, cela configure la JVM utilisée pour démarrer Maven. Cela étant dit, le maven-surefire-plugin crée une nouvelle JVM par défaut, et vos MAVEN_OPTS ne sont donc pas transmises.

Pour configurer la taille de la JVM utilisée par le maven-surefire-plugin, vous devrez soit:

  • changer le forkMode à never (ce qui n'est pas une bonne idée car Maven ne sera pas isolé du test) ~ou~
  • utiliser le paramètre argLine (la bonne façon):

Dans ce dernier cas, quelque chose comme ceci:

  -Xmx1024m

Mais Je dois dire que je suis plutôt 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" (masquer ?) votre problème.

Références

1 votes

Mettez-vous à jour la balise uniquement dans votre fichier pom.xml parent ?

3 votes

1 votes

@Macarse forkMode a été déprécié, mais je pense seulement pour être remplacé par forkCount qui a une fonctionnalité similaire. Une façon d'utiliser MAVEN_OPTS est ${env.MAVEN_OPTS} mais cela 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 devez définir argLine d'une manière différente stackoverflow.com/questions/12269558/maven-jacoco-plugin-err‌​or

69voto

user738048 Points 465

Pour ceux qui sont nouveaux dans Maven (comme moi), voici la configuration complète qui va dans la section build de votre pom. Cheers.

        org.apache.maven.plugins
        maven-surefire-plugin
        2.22.2

            -Xmx1024m

0 votes

Votre solution provoque une JUnitException: TestEngine avec ID 'junit-jupiter' n'a pas réussi à découvrir le test lors du démarrage des tests JUnit dans IntelliJ.

13voto

Max Hohenegger Points 793

Pour contourner temporairement ce problème, j'ai trouvé que la manière la plus rapide était la suivante :

export JAVA_TOOL_OPTIONS="-Xmx1024m -Xms1024m"

12voto

Stephen C Points 255558

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

Par conséquent, manipuler la taille du tas est une mauvaise approche. Au lieu de cela, vous devriez examiner 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 examiner la trace de la pile. S'il n'y en a pas, exécutez à nouveau mvn ... test avec l'option -e.

1 votes

@Stephen, je peux passer le cas de test dans eclipse après avoir défini -Xmx1024m dans la configuration de l'exécution, mais il lance toujours un OutOfMemoryError lorsque je lance "mvn test" dans la console, même lorsque j'ajoute les options -e "mvn test -DMAVEN_OPTS=-Xmx1024m"

3 votes

@zjffdu - Vous avez complètement manqué mon point! Le but d'ajouter "-e" n'est pas de faire fonctionner les tests. C'est pour découvrir pourquoi ils ne fonctionnent pas.

0 votes

@Stephen, j'ai ajouté l'option 'e', mais je n'ai pas obtenu suffisamment d'informations utiles.

7voto

Minh Dang Points 11

J'ai résolu ce problème de deux façons de mon côté :

  1. Ajout de cette configuration dans le fichier pom.xml

    -Xmx1024m
  2. Passer à utiliser JDK 1.7 au lieu de 1.6

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X