Ab heute schlägt meine Maven-Kompilierung fehl.
[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)
[FEHLER] Nicht genügend Speicher; Verwenden Sie beim Start das Flag -Xmx (Java -Xmx128M ...), um die Speicherkapazität zu erhöhen.
Bis gestern hatte ich erfolgreich eine Maven-Kompilierung ausgeführt.
Bis heute habe ich meinen Heap auf 3 GB erhöht . Außerdem habe ich nur 2-3 kleinere Codezeilen geändert, sodass ich diesen Fehler "Nicht genügend Speicher" nicht verstehe.
vagrant@dev:/vagrant/workspace$ echo $MAVEN_OPTS
-Xms1024m -Xmx3000m -Dmaven.surefire.debug=-Xmx3000m
BEARBEITEN: Ich habe den Kommentar des Posters ausprobiert, indem ich die pom.xml meines ausgefallenen Moduls geändert habe. Aber ich habe den gleichen Maven Build Fehler bekommen.
<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
quelle
quelle
-Xmx
.Antworten:
Über was für ein Webmodul sprechen Sie? Ist es ein einfacher Krieg und hat Verpackungskrieg?
Wenn Sie das Web Toolkit (GWT) von Google nicht verwenden, müssen Sie keine bereitstellen
gwt.extraJvmArgs
Das Verzweigen des Kompilierungsprozesses ist möglicherweise nicht die beste Idee, da ein zweiter Prozess gestartet wird, der
MAVEN_OPTS
insgesamt ignoriert wird , wodurch die Analyse erschwert wird.Also würde ich versuchen, den Xmx durch Setzen von MAVEN_OPTS zu erhöhen
Und verzweigen Sie den Compiler nicht in einen anderen Prozess
Eine Erhöhung
-XX:MaxPermSize=512m
sollte nicht erforderlich sein, da ich den Fehler erwarten würde, wenn die Dauerwellengröße der Grund für das Problem istjava.lang.OutOfMemoryError: PermGen space
Wenn dies Ihr Problem nicht löst, können Sie durch Hinzufügen Heap-Dumps zur weiteren Analyse erstellen
-XX:+HeapDumpOnOutOfMemoryError
. Darüber hinaus können Sie mit jconsole.exe in Ihrem Java-Bin-Verzeichnis eine Verbindung zum JVM herstellen, während die Kompilierung ausgeführt wird, und sehen, was im Heap des JVM vor sich geht.Eine andere Idee (kann eine dumme sein), die mir einfiel: Haben Sie genug RAM in Ihrem Computer? Das Definieren der Speichergröße ist hilfreich, aber wenn Ihr Host nur 4 GB hat und Sie möglicherweise das Problem haben, dass Java den definierten Speicher nicht verwenden kann, da er bereits vom Betriebssystem, Java, MS-Office ... verwendet wird.
quelle
Wenn Sie zu spät antworten, um eine weitere Option anstelle der allgemeinen
MAVEN_OPTS
Umgebungsvariablen zu erwähnen , die an den Maven übergeben werden soll, erstellen Sie die erforderlichen JVM-Optionen.Seit Maven 3.3.1 könnten Sie einen
.mvn
Ordner als Teil des betreffenden Projekts und einejvm.config
Datei als perfekten Ort für eine solche Option haben.Als Teil der offiziellen Versionshinweise
Der Hauptvorteil dieses Ansatzes besteht darin, dass die Konfiguration auf das betreffende Projekt isoliert und auch auf den gesamten Build angewendet wird und weniger fragil ist als
MAVEN_OPTS
bei anderen Entwicklern, die an demselben Projekt arbeiten (vergessen, es festzulegen).Darüber hinaus werden die Optionen bei einem Projekt mit mehreren Modulen auf alle Module angewendet.
quelle
Ich habe das gleiche Problem beim Versuch, "Clean Install" mit einem Lowend 512Mb RAM VPS und einer guten CPU zu kompilieren. Führen Sie OutOfMemory aus und beenden Sie das Skript wiederholt.
Ich habe benutzt
export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=350m"
und gearbeitet.Ich bekomme immer noch einen anderen Kompilierungsfehler, weil ich Maven zum ersten Mal brauche, aber das OutOfMemory-Problem ist verschwunden.
quelle
Option hinzufügen
zu MAVEN_OPTS
maven-compiler-plugin
Optionenquelle
maven-compilier-plugin
und erhöhen Sie sie-XX:MaxPermSize
,Xmx
sollte =XX:MaxPermSize
maven-compilier-plugin
Ich habe das gleiche Problem beim Kompilieren von Druid.io, das Erhöhen der MaxDirectMemorySize hat endlich funktioniert.
quelle
Diese Konfiguration funktioniert in meinem Fall
Versuchen Sie, -XX: MaxPermSize anstelle von -XX: MaxPermGen zu verwenden
quelle
quelle
Auf welcher Art von Betriebssystem laufen Sie?
Um mehr als 2 GB RAM zuzuweisen, muss mindestens ein 64-Bit-Betriebssystem vorhanden sein.
Dann gibt es noch ein anderes Problem. Selbst wenn Ihr Betriebssystem über unbegrenzten Arbeitsspeicher verfügt, dieser jedoch so fragmentiert ist, dass kein einziger freier Block mit 2 GB verfügbar ist, kommt es auch zu Speicherausnahmen. Beachten Sie außerdem, dass der normale Heap-Speicher nur ein Teil des vom VM-Prozess verwendeten Speichers ist. Auf einem 32-Bit-Computer können Sie Xmx wahrscheinlich nie auf 2048 MB einstellen.
Ich würde auch vorschlagen, min einen maximalen Speicher auf den gleichen Wert zu setzen, da in diesem Fall, sobald der VM der Speicher ausgeht, die erste Zeit von 1 GB von Anfang an zugewiesen wird, die VM dann einen neuen Block zuweist (vorausgesetzt, er nimmt mit zu 500 MB Blöcke) von 1,5 GB, nachdem dies zugewiesen wurde, würde das gesamte Material vom ersten Block in den neuen kopiert und danach Speicher freigegeben. Wenn der Speicher wieder knapp wird, werden die 2 GB zugewiesen und die 1,5 GB werden kopiert, wobei vorübergehend 3,5 GB Speicher zugewiesen werden.
quelle
Stellen Sie beim Erstellen des Projekts auf einer Unix / Linux-Plattform die Syntax der Maven-Optionen wie folgt ein. Beachten Sie, dass einfache Qoutation Zeichen, nicht doppelte Qoutation.
quelle
Die Verwendung von .mvn / jvm.config hat für mich funktioniert und hat den zusätzlichen Vorteil, mit dem Projekt verknüpft zu sein.
quelle
Dies geschieht in großen Projekten unter Windows, wenn Cygwin oder ein anderer Linux-Emulator verwendet wird (Git Bash). Durch einen Zufall funktionieren beide nicht an meinem Projekt, was ein großes Open-Source-Projekt ist. In einem sh-Skript werden einige mvn-Befehle aufgerufen. Die Speichergröße wächst auf eine Heap-Größe, die größer ist als die in Xmx angegebene und die meiste Zeit in einem Fall, in dem der zweite Windows-Prozess gestartet wird. Dies erhöht den Speicherverbrauch noch weiter.
In diesem Fall besteht die Lösung darin, eine Batchdatei und eine reduzierte Xmx-Größe zu verwenden. Anschließend sind die Maven-Vorgänge erfolgreich. Bei Interesse kann ich weitere Details verraten.
quelle
Jemand hat das Problem mit dem 32-Bit-Betriebssystem bereits erwähnt. In meinem Fall war das Problem, dass ich mit 32-Bit-JDK kompilierte.
quelle
Durch Erhöhen der Speichergröße in der Umgebungsvariablen 'MAVEN_OPTS' kann dieses Problem behoben werden. Bei mir hat die Erhöhung von -Xmx756M auf -Xmx1024M funktioniert.
quelle