Ich habe eine Jenkins-Build eines Android-Projekts auf einem Mac Mini (10.9.5). Die Jenkins Build schlägt fehl mit Fehlermeldungen wie folgt aus:Erhöhung von PermGen Speicherplatz für Jenkins/Gradle
<package>.myTest > test_myTest FAILED
org.mockito.cglib.core.CodeGenerationException at test_myTest.java:65
Caused by: java.lang.reflect.InvocationTargetException at test_myTest.java:65
Caused by: java.lang.OutOfMemoryError at test_myTest.java:65
java.lang.OutOfMemoryError: PermGen space
Dies wird manchmal gefolgt von Nachrichten wie
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "/0:0:0:0:0:0:0:1:50340 to /0:0:0:0:0:0:0:1:50339 workers Thread 2"
16:47:17
16:47:17 Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "/0:0:0:0:0:0:0:1:50340 to /0:0:0:0:0:0:0:1:50339 workers Thread 4"
16:47:18
16:47:18 Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "/0:0:0:0:0:0:0:1:50340 to /0:0:0:0:0:0:0:1:50339 workers Thread 5"
16:47:18
16:47:18 Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "/0:0:0:0:0:0:0:1:50340 to /0:0:0:0:0:0:0:1:50339 workers Thread 6"
16:47:19
Es scheitert in der Regel an der gleichen Stelle in der Build. Entsprechend der Jenkins wiki
Sehen Sie ständig OOME rund um die gleiche Phase in einem Build? Wenn ja, braucht es vielleicht nur einen größeren Speicher.
dies kann bedeuten, ich brauche nur mehr PermGen Raum.
Die Stackoverflow-Beiträge/Blogposts, die ich gelesen habe, zeigen an, dass ich die maximale PermGen-Größe (-XX:MaxPermSize=1024M
, zum Beispiel) erhöhen muss. Ich weiß jedoch nicht, wo ich das machen soll.
Ich habe dies änderte sich für GRADLE_OPTS
und JAVA_OPTS
so Umgebung meine Jenkins bauen wie folgt aussieht:
Wie im Screenshot zu sehen, ich einige Optionen Müll sammeln Perm Gen auch hinzugefügt, wie here empfohlen.
Das schien zu funktionieren - ich hatte gestern ein paar erfolgreiche Builds, aber es scheitert jetzt wieder (ohne Änderungen, die mir bekannt sind).
Nach dem Lesen this answer, änderte ich auch die folgende Zeile in meinem Projekt gradle.properties
Datei.
org.gradle.jvmargs=-Xms1024M -Xmx2048M -XX:PermSize=512M -XX:MaxPermSize=2048 -XX:+CMSClassUnloadingEnabled -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
Dies hat das Problem nicht behoben.
Antworten auf ähnliche Fragen wie this und this lassen mich denken, dass ich mich dem falsch nähern könnte - sollte ich eine Computereinstellung für den Mac (10.9.5) ändern, auf dem Jenkins läuft? Wie ändere ich den PermGen-Bereich richtig?
Edit: Ich dachte vorher hatte, dass vielleicht die Umgebungsvariablen wurden nicht festgelegt zu werden, aber ich festgestellt, dass sie unter dem Build-Ergebnis Umgebungsvariablen erscheinen (jenkins/job/<Project>/146/injectedEnvVars/
)
Vielen Dank für Ihre Antwort! Ich hatte nicht bemerkt, dass die Tests auf einer separaten JVM laufen, also hat mich deine Antwort auf den richtigen Weg gebracht. Ich werde das Kopfgeld vergeben, wenn die Wartezeit abgelaufen ist. – Michiyo