java.lang.OutOfMemoryError: PermGen Raum im Spiel-Framework

8

Bearbeiten: - play ~run um mein Projekt zu starten

wie man dieses Problem beseitigt, Mein Projekt befindet sich in der Testphase. täglich nach 5-6 Stunden hört es plötzlich auf und gibt den unteren Fehler. Was zu tun, um diesen Fehler zu entfernen? ich entwickle dieses projekt in scala 2.1 mit playframework 2.2

%Vor%     
Govind Singh 08.02.2014, 14:43
quelle

5 Antworten

9

Ich hatte das gleiche Problem, also habe ich SBT_OPTS wie folgt exportiert:

%Vor%     
eliasah 13.06.2014 15:54
quelle
3

Im Allgemeinen bedeutet dies, dass Sie Ihrer JVM nicht genug Speicher zur Verfügung gestellt haben oder dass Sie ein Speicherleck haben. Sehen Sie, wie Menschen solche Probleme angehen: Umgang mit "java.lang.OutOfMemoryError : PermGen space "error oder suchen Sie nach nicht spielspezifischen Fehlern:" java.lang.OutOfMemoryError: PermGen ".

Beim Betrachten Ihres Logs ist mir aufgefallen, dass Sie es wahrscheinlich von SBT oder einem anderen Build-Tool wie Maven ausführen ("Waiting for source changes ..."). Um SBT dabei zu helfen, Speicherlecks zu verhindern, können Sie diese Argumente beim Mittagessen hinzufügen:

%Vor%

Beachten Sie die Befehlszeile zum Entladen der Klasse arg. Im Allgemeinen habe ich bemerkt, dass Apps, die in SBT laufen, immer noch Ressourcen verlieren, egal was du tust, aber in der Produktion passiert es nicht. Sie könnten versuchen, in einem gegabelten JVM-Modus zu laufen, um SBT zu helfen - sehen Sie zum Beispiel das Plugin SBT-Revolver . Wenn Sie wirklich wissen möchten, wie Ihre Anwendung Speicher verbraucht und Speicherlecks aufweist, führen Sie sie außerhalb eines Build-Tools aus, d. H. Sie stellen sie in einem Container wie Tomcat bereit oder führen ein JAR oder was auch immer aus. Sie können Tools wie jconsole hinzufügen, um die Speichernutzung zu beobachten.

    
yǝsʞǝlA 08.02.2014 14:55
quelle
2

Beginnen Sie, indem Sie beim Start der JVM Ihre Dauer erhöhen.

Profilieren Sie Ihren Code und finden Sie heraus, warum Perm verbraucht wird.

Suchen Sie nach Sammlungen, die niemals Referenzen, tief rekursive Aufgaben usw. freigeben.

    
duffymo 08.02.2014 14:47
quelle
2

Ihr Code generiert viele Klassen. Klassen werden im PermGen-Bereich gespeichert und werden nie vor Version 8 von Garbage Collection gesammelt. Sie können Ihren PermGen-Speicherplatz mit der Option -XXMaxPermSize erhöhen, wenn Sie die JVM ausführen, zum Beispiel:

%Vor%

Die Verwendung von -Xmx oder -Xms (Heap-Speicher) funktioniert nicht, da dies ein anderer Speicherplatz ist.

Sie können auch eine Java 8 JVM verwenden, da sie PermGen nicht mehr verwendet.

    
helderdarocha 08.02.2014 14:57
quelle
-1

Sie können jconsole.exe verwenden, das Teil von JDK ist, um die Tendenz zu sehen, wie sich die PermGen-Größe erhöht. Möglicherweise erhöht es sich in bestimmten Zeitintervallen, so dass es einfacher für Sie zu debuggen ist. Versuchen Sie auch, die Größe von PermGen zu erhöhen: Erhöhen Sie den zulässigen Speicherplatz . Aber wenn das Problem in Code ist, wird es für eine lange Zeit nicht helfen ...

    
Alex Kartishev 08.02.2014 14:57
quelle