it-swarm.com.de

Eclipse-Speichereinstellungen beim Abrufen von "Java Heap Space" und "Out of Memory"

Beim Versuch, ein Flex/Java-Projekt in Eclipse zu starten und auszuführen, wurde mit Eclipse, Tomcat und einer JRE immer wieder eine "Out of Memory Exception" und ein "Java Heap Space" angezeigt.

Bei der Suche nach Speicheranpassungen habe ich drei Stellen gefunden, an denen diese angepasst werden können:

  • Eclipse.ini

  • Die JRE-Einstellungen unter Fenster> Einstellungen

  • Catalina.sh oder Catalina.bat

Was sind die Unterschiede zwischen dem Setzen von -xms und -xmx an diesen verschiedenen Stellen und was bedeutet das?

Gibt es eine Möglichkeit, zu überprüfen, ob diese Speichereinstellungen entsprechend festgelegt wurden?

Was sind die optimalen -xms- und -xmx-Einstellungen für einen Computer mit 2 GB RAM?

Irgendwelche anderen Erinnerungstipps?

Vielen Dank.

58
Brandon

-xms ist der Startspeicher (beim Start von VM), -xmx ist der maximale Speicher für die VM

  • Eclipse.ini: Der Speicher für das VM, das Eclipse ausführt
  • weitere Einstellungen: Der Speicher für Java Programme, die von Eclipse ausgeführt werden
  • catalina.sh: Der Speicher für Ihren Tomcat-Server
52
Vinze

Als erstes schlage ich vor, dass Sie das Problem eingrenzen, auf welche Komponente die "Out of Memory Exception" (Ausnahmebedingung wegen unzureichendem Speicher) ausgelöst wird.

Das könnte sein:

  1. Eclipse selbst (was ich bezweifle)
  2. Ihre Bewerbung unter Tomcat

Die JVM-Parameter -xms Und -xmx Repräsentieren den "Startspeicher" des Heaps und den "maximalen Speicher". Vergiss das "Startgedächtnis". Dies wird Ihnen jetzt nicht weiterhelfen und Sie sollten diesen Parameter nur ändern, wenn Sie sicher sind, dass Ihre App diese Speicherkapazität schnell verbraucht.

In der Produktion ist der einzige Parameter, den Sie ändern können, der -xmx In den Dateien Catalina.sh oder Catalina.bat. Wenn Sie Ihre Webanwendung jedoch direkt in Eclipse mit einer konfigurierten Debug-Umgebung von Tomcat testen, wechseln Sie einfach zu "Debug-Konfigurationen"> "Apache Tomcat"> "Argumente"> "VM-Argumente" und setzen Sie den -xmx Dort.

Das optimale -xmx Für 2 GB hängt von Ihrer Umgebung und der Anzahl der Anfragen ab, die Ihre App möglicherweise entgegennimmt. Ich würde Werte von 500 MB bis zu 1 GB versuchen. Überprüfen Sie das "Zonen" -Limit Ihres virtuellen Arbeitsspeichers und das Limit der JVM.

14
bruno conde

In unserem Fall wurden 2 Probleme gefunden.

  1. Der Speicher wurde angehalten und wir mussten die Startdauerwelle auf einen höheren Wert einstellen. Ich vermute, es wurde Speicher verwendet, der schneller als in der Lage war, ihn zuzuweisen. In unserem Fall. -XX: PermSize = 256m -XX: MaxPermSize = 256m

  2. Wir verwenden Clearcase und das Plugin von Rational Clearcase SCM (7.0.0.2) wurde in Eclipse verwendet. Das Plugin war der Grund, warum Eclipse abstürzte. Und im Moment wissen wir nicht warum, aber es könnte gut sein, es für andere zu wissen. Wurde gezwungen, es zu deaktivieren.

3

Mein FLashBuilder stürzt die ganze Zeit ab, wenn ich versuche, eine neue Version zu veröffentlichen, oder wenn ich die Funktionen "Mark Occurrences" und "Link with editor" missbrauche.

Ich habe meine Flash-Leistung erheblich verbessert, indem ich diese Schritte befolgt habe http://www.redcodelabs.com/2012/03/Eclipse-speed-up-flashbuilder/

Insbesondere, indem Sie die FlashBuilder.ini auf die folgende Konfiguration einstellen

-vm
C:/jdk1.6.0_25/bin
-startup
plugins/org.Eclipse.equinox.launcher_1.2.0.v20110502.jar
–launcher.library
plugins/org.Eclipse.equinox.launcher.win32.win32.x86_64_1.1.100.v20110502
-product
org.Eclipse.epp.package.jee.product
–launcher.defaultAction
openFile
–launcher.XXMaxPermSize
256M
-showsplash
org.Eclipse.platform
–launcher.XXMaxPermSize
256m
–launcher.defaultAction
openFile
-vmargs
-server
-Dosgi.requiredJavaVersion=1.5
-Xmn128m
-Xms1024m
-Xmx1024m
-Xss2m
-XX:PermSize=128m
-XX:MaxPermSize=128m
-XX:+UseParallelGC

Meine Hardware-Konfiguration ist Intel i3 CPU, 4 GB DDR3, Windows 7 64Bit.

2

Tomcat in Eclipse verwendet weder catalina.sh noch bat. Um den Speicher für verwaltete Tomcat einzurichten, verwenden Sie VM Einstellungen in der Server-Ausführungskonfiguration

2
chro

Ich habe diese Einstellungen:

-vmargs
...
-Duser.name=...
-XX:PermSize=256m
-XX:MaxPermSize=256m
-Xmn128m
-Xms256m
-Xmx768m

Eclipse ist zufällig abgestürzt, bevor ich PermSize auf MaxPermSize gesetzt habe.

1
dmatej

Es gibt aus gutem Grund ein paar verschiedene Speichereinstellungen.

Die Einstellung für den Eclipse-Speicher liegt daran, dass Eclipse ein großes Java) - Programm ist. Wenn in mehreren Projekten eine große Anzahl von Dateien geöffnet ist, möchten Sie Eclipse geben more ram. Dies ist ein Problem, das nur auf "Unternehmenssystemen" auftritt, auf denen normalerweise in privaten Projekten nicht so viele Dateihandles oder Schnittstellen verwendet werden.

Die JRE-Einstellung gibt an, wie viel RAM für die Laufzeit von Java) zur Verfügung steht, wenn Sie Ihr Projekt ausführen. Dies ist wahrscheinlich der Wert, den Sie benötigen, wenn Sie eine Memory-Hogging-Anwendung ausführen. Ich habe mathematische Projekte ausgeführt, die brauchte ein paar Gigs RAM und musste der JRE wirklich mitteilen, dass es in Ordnung war. Die JVM ging weiterhin davon aus, dass sich mein Programm in einem undichten Zustand befand, aber ich tat es absichtlich und musste JVM ausdrücklich mitteilen, was es verwenden durfte .

Die Speichereinstellung von Catalina gilt dann für den Anwendungsserver Tomcat. Dieser Server benötigt Speicher für jede Anwendung und gleichzeitige Benutzer. Dies passt zur JRE-Nummer, da es sich bei Ihrem Projekt möglicherweise um eine Webanwendung handelt und ich nicht sicher bin, welche Anwendung den Speicher benötigt.

1
Karl

Auch haben einige Probleme mit dem Speicher in Eclipse, aber die Art und Weise, wie es für uns ist, ist nicht, wenn der eigentliche Lauf, es ist, wenn Eclipse eine Aktualisierung (manuell oder automatisch) ausführt, oder wenn versucht, es zu erstellen, Eclipse abstürzt und ausschalten.

In den Protokollen gibt es einige Infos:

Heap
 def new generation   total 36352K, used 11534K [0x10040000, 0x127b0000, 0x14f00000)
  eden space 32320K,  29% used [0x10040000, 0x10994c30, 0x11fd0000)
  from space 4032K,  49% used [0x123c0000, 0x125aed80, 0x127b0000)
  to   space 4032K,   0% used [0x11fd0000, 0x11fd0000, 0x123c0000)
 tenured generation   total 483968K, used 125994K [0x14f00000, 0x327a0000, 0x50040000)
   the space 483968K,  26% used [0x14f00000, 0x1ca0ab38, 0x1ca0ac00, 0x327a0000)
 compacting perm gen  total 58112K, used 57928K [0x50040000, 0x53900000, 0x60040000)
   the space 58112K,  99% used [0x50040000, 0x538d2160, 0x538d2200, 0x53900000)
No shared spaces configured.

Auch wenn ich die Eclipse.ini so anpasse, dass sie diese Werte verwendet, scheint sie nicht angewendet zu werden.

-showsplash
org.Eclipse.platform
--launcher.XXMaxPermSize
1024M
-framework
plugins\org.Eclipse.osgi_3.4.2.R34x_v20080826-1230.jar
-vmargs
-Dosgi.requiredJavaVersion=1.5
-XX:MaxPermSize=256m
-Xms512m
-Xmx1024m

Hat jemand dieses Problem schon einmal gesehen?
Fügt hinzu, dass das verwendete Projekt sehr groß ist.

1

Wir haben mit Ant ein Heap-Space-Problem festgestellt, als wir versuchten, ein sehr großes Flex-Projekt zu erstellen, das nicht durch Erhöhen des Ant zugewiesenen Speichers oder durch Hinzufügen des fork = true-Parameters gelöst werden konnte. Dies war ein Fehler in Flex 3.4.0 sdk. Ich habe es endlich herausgefunden, nachdem ich die Entwickler nach ihrer SDK-Version befragt und auf 3.3.0 zurückgesetzt hatte.

Für die Neugierigen.

Ich habe den Fehler in einer Interface-Datei gefunden, in der ein zusätzliches Accessor-Paar "get/set maskTrackSkin" hinzugefügt wurde. Der Heap-Space-Fehler trat auf, wenn der Schnittstelle zusätzliche Funktionen hinzugefügt wurden, und die Schnittstelle befand sich aus Gründen der Verschlechterung nicht in dem Projekt, in dem der Heap-Space-Fehler aufgetreten war. Hoffe das hilft jemandem.

0
PRangel

Überlegen Sie, ob dies plausibel ist, wenn Ihnen nicht genügend Arbeitsspeicher zur Verfügung steht: Benötigen Sie wirklich so viel Arbeitsspeicher? Wenn dies nicht der Fall ist (d. H. Wenn Sie keine großen Objekte haben und aus irgendeinem Grund keine Millionen von Objekten erstellen müssen), besteht die Möglichkeit, dass ein Speicherverlust vorliegt.

In Java bedeutet dies, dass Sie einen Verweis auf ein Objekt behalten, obwohl Sie es nicht mehr benötigen. Häufige Ursachen hierfür sind das Vergessen des Aufrufs von close () für Ressourcen (Dateien, DB-Verbindungen, Anweisungen und Ergebnismengen usw.).

Wenn Sie einen Speicherverlust vermuten, ermitteln Sie mithilfe eines Profilers, welches Objekt den gesamten verfügbaren Speicher belegt.

0
Aaron Digulla

In Adobe Flash Builder 4.6 Read Me.pdf wird empfohlen, die Datei Eclipse.ini für Ihre Eclipse-Instanz so zu bearbeiten, dass sie die folgenden Einstellungen enthält:

-vmargs -Xms256m -Xmx512m -XX:MaxPermSize=256m -XX:PermSize=64m
0
Tarun