97 votes

Échec de la construction de Maven en dehors de la mémoire

À partir d'aujourd'hui, ma compilation maven échoue.

[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] Mémoire insuffisante ; pour augmenter la quantité de mémoire, utilisez l'indicateur -Xmx au démarrage (java -Xmx128M ...)

Depuis hier, j'ai réussi à lancer une compilation maven.

A partir d'aujourd'hui, je viens de faire passer mon tas à 3 GO . De plus, je n'ai modifié que 2 ou 3 lignes de code mineures, et je ne comprends donc pas cette erreur "out of memory".

vagrant@dev:/vagrant/workspace$ echo $MAVEN_OPTS
-Xms1024m -Xmx3000m -Dmaven.surefire.debug=-Xmx3000m

EDIT : J'ai essayé le commentaire du poster en changeant le pom.xml de mon module en échec. Mais j'ai eu la même erreur de construction 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>

1 votes

Pourriez-vous fournir plus de traces de la pile ? Je suis curieux de voir ce qui peut causer une initialisation de String à manquer de mémoire. Définir la taille du tas dans MAVEN_OPTS semble être la solution, mais je pense qu'il y a quelque part une chaîne de caractères ridiculement grande pour laquelle vous n'allouez pas assez de mémoire. -Xmx .

6voto

DeviceManager Points 61
_JAVA_OPTIONS="-Xmx3G" mvn clean install

4voto

La configuration ci-dessous fonctionne dans mon cas

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

Essayez d'utiliser -XX:MaxPermSize au lieu de -XX:MaxPermGen.

3voto

Christofer Dutz Points 1006

Quel type de système d'exploitation utilisez-vous ?

Afin d'attribuer plus de 2 Go de mémoire vive, le système d'exploitation doit être au moins 64 bits.

Il y a ensuite un autre problème. Même si votre système d'exploitation dispose d'une mémoire vive illimitée, mais que celle-ci est fragmentée de telle sorte qu'aucun bloc libre de 2 Go n'est disponible, vous obtiendrez également des exceptions de manque de mémoire. Et gardez à l'esprit que la mémoire normale du tas n'est qu'une partie de la mémoire utilisée par le processus VM. Ainsi, sur une machine 32 bits, vous ne pourrez probablement jamais régler Xmx sur 2048 Mo.

Je suggère également de définir les valeurs min et max de la mémoire sur la même valeur, car dans ce cas, dès que la VM manque de mémoire la première fois, 1 Go est alloué dès le début, la VM alloue ensuite un nouveau bloc (en supposant qu'elle augmente avec des blocs de 500 Mo) de 1,5 Go, après quoi elle copie toutes les données du premier bloc vers le nouveau et libère de la mémoire. S'il manque à nouveau de mémoire, les 2 Go sont alloués et les 1,5 Go sont ensuite copiés, ce qui alloue temporairement 3,5 Go de mémoire.

2voto

ÖMER TAŞCI Points 192

Lors de la construction du projet sur la plateforme Unix/Linux, définissez la syntaxe des options Maven comme ci-dessous. Notez que les signes de qoutation simple, et non de qoutation double.

export MAVEN_OPTS='-Xmx512m -XX:MaxPermSize=128m'

1voto

user2046211 Points 316

Quelqu'un a déjà mentionné le problème du système d'exploitation 32 bits. Dans mon cas, le problème était que je compilais avec un JDK 32 bits.

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