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
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
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
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