2013-01-23 13 views
6

Wie unten zu sehen ist, dauerte eine stop-the-world GC-Operation mitten in allem, was wie erwartet funktionierte, +60 Sekunden. Man könnte feststellen, dass man die ganze Zeit die Welt anhalten muss, denn die (Terrakotta) Kunden fallen aus und beschweren sich (der Terrakotta-Server) hat während dieser Zeit nicht geantwortet.JVM Minute lang GC

Ist dies ein kleiner GC? Wenn ja, könnte das an Hunger in der jungen Generation liegen (Eden + Überlebende?).

Ist nur 109333 (KB) frei?

Ich fange an, die verschiedenen Speicherbehälter zu entwerfen, irgendeinen anderen Vorschlag, was getan werden kann, um Probleme wie diese weiter zu diagnostizieren?

date, startMem=24589884, endMem=24478495, reclaimed=111389, timeTaken=0.211244 (1172274.139: [GC 24589884K->24478495K(29343104K), 0.2112440 secs]) 
date, startMem=24614815, endMem=24505482, reclaimed=109333, timeTaken=61.301987 (1172276.518: [GC 24614815K->24505482K(29343104K), 61.3019860 secs]) 
date, startMem=24641802, endMem=24529546, reclaimed=112256, timeTaken=2.68437 (1172348.921: [GC 24641802K->24529546K(29343104K), 2.6843700 secs]) 

Sun JVM ist 1.6, mit dem folgenden config:

-Xms28672m -Xmx28672m -XX: + UseConcMarkSweepGC -XX: + PrintGCTimeStamps -XX: + PrintGC

Sane Konfigurationseinstellungen zur weiteren Fehlersuche GC:

'-XX:+PrintGCDateStamps' Print date stamps instead of relative timestamps 
'-XX:+PrintGCDetails' Will show what cpu went for (user, kern), gc algorithm used 
'-XX:+PrintHeapAtGC' will show all of the heaps memory containers and their usage 
'-Xloggc:/path/to/dedicated.log' log to specific file 
+0

Was macht Ihre Anwendung? GC-Jitter tritt auf, wenn in mehreren Sweeps große Mengen an Speicher aus dem Heap-Speicher zurückgewonnen werden, was wahrscheinlich dazu führt, dass jeder Sweep dazu führt, dass mehr Objekte für die Sammlung in Frage kommen, was zu weiteren Sweeps führt. Selbst der 2-Sekunden-Lauf, den Sie zeigen, ist eine riesige Menge an Zeit für GC. Ich denke, Sie werden ändern, wie Ihre Anwendung Objekte behandelt, anstatt JVM-Konfiguration wird der Weg sein, den Sie ergreifen müssen. Jede Anwendung, die den GC-Jitter niedrig halten soll, sollte Objekte lieber erneut verwenden als neu zuweisen. – codeghost

+0

Es ist eine Sitzung (Cookie) speichern. Die Zahlen, zum Beispiel "zurückgefordert", zeigen an, dass nicht viel Speicher tatsächlich zurückgewonnen wurde. Wenn ja, ist es ziemlich praktisch zu wissen, warum. Ich stimme dir voll und ganz zu, dass es gelöst werden muss, wie die (Session-) Objekte gehandhabt werden, was sie beinhalten usw. Es gibt einen Prozess, um die Sitzungen besser zu behandeln, aber jetzt habe ich die Aufgabe herauszufinden, warum a GC würde +60 Sekunden brauchen und immer noch nicht mehr Speicher freigeben als die vorherigen 0,2s GC. – user135361

+2

Werfen Sie einen Blick auf diesen Blog http://kirk.blog-city.com/why_do_i_have_this_long_gc_pause.htm kann Ihnen ein paar Hinweise geben. – codeghost

Antwort

1

-XX:+UseConcMarkSweepGC ermöglicht die gleichzeitige Sammlung

Default Vs. CMS

Gesamtzeit die Summe der Stop-the-World-Phasen (JVM blockiert) und gleichzeitige Phasen (JVM Ausführen Benutzercode) aufgenommen ist.

Sie sollten die detaillierte GC-Protokollierung zur weiteren Untersuchung aktivieren, da Sie keine Informationen darüber haben, wie viele dieser +60 Sekunden die JVM blockieren.

+0

Ich habe bereits erwähnt, dass mehr ausführliche Ausgabe protokolliert wird. Die Frage ist nicht, wie CMS funktionieren soll, sondern unter welchen Umständen ein langer Stop-the-World stattfinden würde. Die JVM war die ganze Zeit blockiert, also ist es ein "Major GC" und wahrscheinlich wegen Defragmentierung. Wenn ja, wie kann ich wissen, ob das Hinzufügen von mehr Heap wird helfen, oder in welchen Fällen würde das Einplanen von CMS früher helfen. Ich weiß deinen Versuch zu schätzen, aber du wirst einen Versuch unternehmen müssen, die Faktoren zu isolieren, bevor ich dich aufmuntere. – user135361

+2

Woher wissen Sie, dass die JVM die ganze Zeit ohne detailliertes Protokoll blockiert wurde? Sie sollten der Frage alle Informationen hinzufügen, die Sie haben. – fglez

+0

guter Punkt, Aktualisierung. – user135361