Verlangsamt sich die Sun JVM, wenn mehr Speicher über -Xmx zugewiesen wird?

8

Verlangsamt sich die Sun JVM, wenn mehr Speicher verfügbar ist und über -Xmx verwendet wird? (Annahme: Der Computer verfügt über genügend physischen Speicher, so dass virtueller Speicheraustausch kein Problem darstellt.)

Ich frage, weil meine Produktionsserver ein Speicherupgrade erhalten sollen. Ich möchte den Wert -Xmx auf etwas dekadentes erhöhen. Die Idee besteht darin, irgendwelche Heap-Space-Erschöpfungsfehler aufgrund von eigenen Programmierfehlern, die von Zeit zu Zeit auftreten, zu verhindern. Seltene Ereignisse, aber sie konnten mit meiner sich schnell entwickelnden Webanwendung vermieden werden, wenn ich einen obszönen -Xmx-Wert von 2048 MB oder höher hatte. Die Anwendung wird stark überwacht, sodass ungewöhnliche Spikes beim JVM-Speicherverbrauch bemerkt werden und Fehler behoben werden.

Mögliche wichtige Details:

  • Java 6 (runnign im 64-Bit-Modus)
  • 4-Kern-Xeon
  • RHEL4 64-Bit
  • Frühling, Ruhezustand
  • Festplatte und Netzwerk-IO

BEARBEITEN : Ich habe versucht, die Konfiguration meiner JVM nicht zu posten, aber das lässt die Frage lächerlich offen enden. Also, hier gehen wir mit relevanten Konfigurationsparametern:

%Vor%     
Stu Thompson 14.04.2009, 19:10
quelle

5 Antworten

6

Wenn Sie mehr Speicher hinzufügen, dauert es länger, bis der Heap voll ist. Folglich wird die Häufigkeit von Speicherbereinigungen verringert. Je nachdem, wie sterblich Ihre Objekte sind, können Sie jedoch feststellen, dass die Dauer eines einzelnen GC zunimmt.

Wie lange ein GC dauert, hängt hauptsächlich davon ab, wie viele live Objekte vorhanden sind. Wenn also praktisch alle deine Objekte jung sterben und wenn du erst einmal etabliert bist, entgeht dir keiner von ihnen, du merkst vielleicht nicht viel, wie lange es dauert, einen GC zu machen. Allerdings, wenn Sie den Tenure-Heap durchlaufen müssen, können Sie alles für eine unangemessene Zeit anhalten, da die meisten dieser Objekte noch vorhanden sind. Stimmen Sie die Größen entsprechend ab.

    
James 14.04.2009, 19:34
quelle
4

Wenn Sie nur mehr Speicher auf das Problem werfen, haben Sie in Ihrer Anwendung einen besseren Durchsatz, aber Ihre Reaktionsfähigkeit kann sinken, wenn Sie nicht auf einem Multicore-System mit dem CMS-Garbage Collector arbeiten. Dies liegt daran, dass weniger GCs auftreten, aber sie werden mehr zu tun haben. Der Vorteil ist, dass Sie mit Ihren GCs mehr Speicher freisetzen, so dass die Zuteilung weiterhin sehr billig ist, daher der höhere Durchsatz.

Sie scheinen übrigens -Xmx und -Xms zu verwirren. -Xms legt nur die anfängliche Größe des Heapspeichers fest, während -Xmx die maximale Größe des Heapspeichers ist.

    
Kai 14.04.2009 19:33
quelle
0

Mehr Speicher bedeutet normalerweise eine bessere Leistung in Garbage Collection-Umgebungen, zumindest solange dies nicht zu virtueller Speicherauslastung / -austausch führt.

Der GC verfolgt nur Referenzen, nicht den eigentlichen Speicher. Am Ende wird die VM die gleiche Anzahl von (meist kurzlebigen, temporären) Objekten zuweisen, aber der Garbage Collector muss weniger oft aufgerufen werden - die Gesamtmenge der Garbage Collector Arbeit wird daher nicht mehr sein - noch weniger, da Dies kann auch bei Cache-Mechanismen helfen, die schwache Referenzen verwenden.

Ich bin mir nicht sicher, ob es noch einen Server und eine Client-VM für 64 Bit gibt (es gibt 32 Bit), also sollten Sie das auch untersuchen.

    
Lucero 14.04.2009 19:18
quelle
0

Nach meiner Erfahrung wird es nicht langsamer, aber die JVM versucht ständig, zu Xms zurückzuschneiden und versucht, an der unteren Grenze zu bleiben oder nahe bei. Also, wenn Sie es anstrengen können, bump Xms auch. Sun empfiehlt beides in gleicher Größe. Fügen Sie einige -XX: NewSize = 512m (nur eine erfundene Zahl) hinzu, um den kostspieligen Stapel alter Daten in der alten Generation zu vermeiden, der zu längeren / schwereren GCs auf dem Weg führt. Wir betreiben unsere Web-App mit 700 MB NewSize, weil die meisten Daten nur kurzlebig sind.

Also, unter dem Strich: Ich erwarte keine Verlangsamung, aber setze mehr Speicher ein. Legen Sie einen größeren Bereich für die neue Größe fest und legen Sie Xms auf Xmx fest, um die Belastung für den GC zu verringern, da nicht versucht werden muss, auf Xms-Grenzen zurückzuschneiden ...

    
ReneS 15.04.2009 04:36
quelle
0

Wenn Sie -Xmx erhöhen, wird es normalerweise Ihre Leistung / Ihren Durchsatz nicht unterstützen. Theoretisch könnte es längere "Stop-the-World" -Phasen geben, aber in der Praxis mit dem CMS ist das kein wirkliches Problem.

Natürlich solltest du -Xmx nicht auf einen wahnsinnigen Wert wie 300 Gbyte setzen, es sei denn du brauchst es wirklich :)

    
kohlerm 15.04.2009 07:27
quelle

Tags und Links