À 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)
[ERREUR] Mémoire insuffisante; pour augmenter la quantité de mémoire, utilisez l'indicateur -Xmx au démarrage (java -Xmx128M ...)
Depuis hier, j'avais exécuté avec succès une compilation maven.
À partir d'aujourd'hui, je viens de faire passer mon tas à 3 Go . De plus, je n'ai changé que 2-3 lignes de code mineures, donc je ne comprends pas cette erreur "mémoire insuffisante".
vagrant@dev:/vagrant/workspace$ echo $MAVEN_OPTS
-Xms1024m -Xmx3000m -Dmaven.surefire.debug=-Xmx3000m
EDIT: J'ai essayé le commentaire de l'affiche en modifiant le pom.xml de mon module défaillant. 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>
maven
out-of-memory
maven-3
pom.xml
maven-compiler-plugin
Kevin Meredith
la source
la source
-Xmx
.Réponses:
De quel type de module «Web» parlez-vous? Est-ce une guerre simple et une guerre de type d'emballage?
Si vous n'utilisez pas la boîte à outils Web de Google (GWT), vous n'avez pas besoin de fournir
gwt.extraJvmArgs
Bifurquer le processus de compilation n'est peut-être pas la meilleure idée, car cela démarre un deuxième processus qui ignore
MAVEN_OPTS
complètement, rendant ainsi l'analyse plus difficile.J'essaierais donc d'augmenter le Xmx en définissant MAVEN_OPTS
Et ne branchez pas le compilateur à un processus différent
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin>
L'augmentation
-XX:MaxPermSize=512m
ne devrait pas être requise car si la taille de la perm est la raison du problème, alors je m'attendrais à l'erreurjava.lang.OutOfMemoryError: PermGen space
Si cela ne résout pas votre problème, vous pouvez créer des vidages de tas pour une analyse plus approfondie en ajoutant
-XX:+HeapDumpOnOutOfMemoryError
. De plus, vous pouvez utiliser jconsole.exe dans votre répertoire java bin pour vous connecter au jvm pendant que la compilation est en cours d'exécution et voir ce qui se passe dans le tas du jvm.Une autre idée (peut-être stupide) qui m'est venue, avez-vous assez de RAM dans votre machine? Définir la taille de la mémoire est bien, mais si votre hôte ne dispose que de 4 Go et que vous pourriez avoir le problème que Java ne puisse pas utiliser la mémoire définie car elle est déjà utilisée par le système d'exploitation, Java, MS-Office ...
la source
Répondre tard pour mentionner encore une autre option plutôt que la commune
MAVEN_OPTS
variable d'environnement pour passer au Maven construisez les options JVM requises.Depuis Maven 3.3.1 , vous pourriez avoir un
.mvn
dossier dans le cadre du projet concerné et unjvm.config
fichier comme emplacement idéal pour une telle option.Dans le cadre des notes de publication officielles
Le principal avantage de cette approche est que la configuration est isolée du projet concerné et appliquée à l'ensemble du build également, et moins fragile que
MAVEN_OPTS
pour les autres développeurs travaillant sur le même projet (en oubliant de le paramétrer).De plus, les options seront appliquées à tous les modules dans le cas d'un projet multi-modules.
la source
J'ai eu le même problème en essayant de compiler une "installation propre" en utilisant un VPS de 512 Mo de RAM et un bon processeur. Exécutez OutOfMemory et tué le script à plusieurs reprises.
J'ai utilisé
export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=350m"
et travaillé.Encore un autre échec de compilation parce que c'est la première fois que j'ai besoin de Maven, mais le problème d'OutOfMemory a disparu.
la source
Ajouter une option
à MAVEN_OPTS
maven-compiler-plugin
options<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <configuration> <fork>true</fork> <meminitial>1024m</meminitial> <maxmem>2024m</maxmem> </configuration> </plugin>
la source
maven-compilier-plugin
et augmenter-XX:MaxPermSize
,Xmx
devrait être =XX:MaxPermSize
maven-compilier-plugin
J'ai eu le même problème lors de la compilation de Druid.io, l'augmentation de MaxDirectMemorySize a finalement fonctionné.
la source
Cette 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
la source
la source
Sur quel type de système d'exploitation utilisez-vous?
Afin d'attribuer plus de 2 Go de RAM, il doit s'agir d'au moins un système d'exploitation 64 bits.
Ensuite, il y a un autre problème. Même si votre système d'exploitation a une RAM illimitée, mais qui est fragmentée de telle sorte qu'aucun bloc gratuit de 2 Go n'est disponible, vous obtiendrez également des exceptions de mémoire. Et gardez à l'esprit que la mémoire Heap normale 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 définir Xmx sur 2048 Mo.
Je suggérerais également de définir min une mémoire max à la même valeur, car dans ce cas, dès que la machine virtuelle est à court de mémoire, la première fois que 1 Go est alloué depuis le début, la machine virtuelle alloue alors un nouveau bloc (en supposant qu'il augmente avec 500 Mo de blocs) de 1,5 Go après l'allocation, il copierait tout le contenu du bloc un vers le nouveau et libérerait de la mémoire après cela. S'il manque à nouveau de mémoire, les 2 Go sont alloués et les 1,5 Go sont ensuite copiés, allouant temporairement 3,5 Go de mémoire.
la source
Lors de la construction du projet sur la plate-forme Unix / Linux, définissez la syntaxe des options Maven comme ci-dessous. Notez que les signes de qoutation simples, pas les qoutations doubles.
la source
L'utilisation de .mvn / jvm.config a fonctionné pour moi et a l'avantage supplémentaire d'être lié au projet.
la source
Cela se produit dans les grands projets sous Windows lorsque cygwin ou un autre émulateur Linux est utilisé (git bash). Par hasard, les deux ne fonctionnent pas sur mon projet, ce qui est un gros projet open source. Dans un script sh, quelques commandes mvn sont appelées. La taille de la mémoire augmente pour atteindre une taille de tas plus grande que celle spécifiée dans Xmx et la plupart du temps, dans un cas, le deuxième processus Windows est démarré. Cela rend la consommation de mémoire encore plus élevée.
La solution dans ce cas est d'utiliser un fichier de commandes et une taille Xmx réduite, puis les opérations maven sont réussies. S'il y a de l'intérêt, je peux révéler plus de détails.
la source
Quelqu'un a déjà évoqué le problème du système d'exploitation 32 bits. Dans mon cas, le problème était que je compilais avec JDK 32 bits.
la source
L'augmentation de la taille de la mémoire dans la variable d'environnement «MAVEN_OPTS» aidera à résoudre ce problème. Pour moi, passer de -Xmx756M à -Xmx1024M a fonctionné.
la source