2011-01-04 7 views
6

Wenn ich meine Unit-Tests in Maven auf Windows ausführen, bekomme ich eine OutOfMemory-Ausnahme. Ich habe versucht, die Option -XX: -HeapDumpOnOutOfMemoryError zur todsicheren argLine hinzuzufügen, aber es wird keine Speicherauszugsdatei generiert. Ich habe auch versucht, das gleiche zu MAVEN_OPTS hinzuzufügen, aber immer noch nichts, ich bekomme einfach eine OutOfMemory-Ausnahme und der Prozess hängt, bis ich es manuell beenden.todsichere HeapDumpOnOutOfMemoryError

Mein Pom ist wie folgt:

<plugin> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <configuration>      
     <testFailureIgnore>false</testFailureIgnore> 
     <argLine>-Xms512m -Xmx512m -XX:PermSize=256m -XX:-HeapDumpOnOutOfMemoryError</argLine> 
     <forkMode>once</forkMode>    
    </configuration> 
</plugin> 

MAVEN_OPTS:

set MAVEN_OPTS=-XX:-HeapDumpOnOutOfMemoryError 

Haben Sie eine Ahnung, warum keine Dump-Datei generiert wird?

+0

Die Antwort von @twillouer die richtige ist. – t0r0X

Antwort

2

Try this:

set MAVEN_OPTS="-Dmaven.surefire.debug=\"-XX:-HeapDumpOnOutOfMemoryError\"" 
+0

Immer noch nichts. Ich sehe keine Ausgabe. Ich habe es geschafft, das Speicherleck zu finden, indem ich einen Profiler angeschlossen habe, also danke für deine Antwort. – Koby

1

Ihr Speicherleck könnte nur finden http://jira.codehaus.org/browse/SUREFIRE-495 fixiert werden. Vielleicht möchten Sie securefire 2.7.1 oder neuer ausprobieren.

+0

Vielen Dank für Ihre Antwort, aber mein Problem bezieht sich nicht auf todsichere. Ich benutze Frühling in meinen Tests und ich habe verschiedene Anwendungskontexte für die gleichen Bohnen immer und immer wieder. Da Spring Anwendungskontexte aus Leistungsgründen zwischenspeichert, wurde für sie keiner zerstört und ich erhalte den OutOfMemory-Fehler. Die Lösung besteht darin, meine Tests so zu ändern, dass dieselben Kontexte verwendet werden, anstatt sie in verschiedenen Kontexten zu duplizieren. – Koby

0

Ich glaube, Sie den Pfad vergessen:

<argLine>-Xms512m -Xmx512m -XX:PermSize=256m -XX:-HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp</argLine> 

mit diesem Argument:

 -XX:HeapDumpPath=/tmp 
+0

Dies ist nicht notwendig. Heap Dump wird standardmäßig im Projektverzeichnis erstellt (ich starte Maven über Netbeans). Wann wäre es notwendig? Wann wäre das aktuelle Verzeichnis anders (und nicht beschreibbar)? –

Verwandte Themen