jax 2011 - garbage collection verstehen
DESCRIPTION
Garbage Collection ist nicht gleich Garbage Collection. Neben den grundsätzlich unterschiedlichen Ansätzen wie parallel und concurrent, verfolgen alle JVM's hier unterschiedliche Strategien und das Verhalten unterscheidet sich beträchtlich. Diese Session erläutert die grundsätzlichen Strategien und Tuning Möglichkeiten. Wir widmen uns im Besonderen den Unterschieden im Verhalten und Tuning der drei grossen JVMs Sun, JRockit und IBM. Zuletzt werden erläutern wir die häufigsten Probleme, wie sie erkannt und gelöst werden können.TRANSCRIPT
![Page 1: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/1.jpg)
Garbage Collection verstehen
3 JVMs – ähnlich aber doch verschieden
![Page 2: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/2.jpg)
• Langsam? Wann und Warum
• Auswirkungen
• Jede JVM ist anders
• GC Strategien & Richtiges Tuning
• Probleme und Lösungen
![Page 3: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/3.jpg)
Die Basics
![Page 4: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/4.jpg)
GC Roots
Erreichbare Objekte
Nicht Erreichbare
Objekte Garbage
Vergessene Referenz
Memory Leak
GC auf einen Blick
![Page 5: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/5.jpg)
Viele (über)lebende Objekte
=
Lange Garbage Collection
![Page 6: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/6.jpg)
Generational Heap
• Wenige Allokationen
• Viele Überlebende
• Viele Allokationen
• Wenige Überlebende
Marking Phase
Nach Copy PhaseSpeicher nach Sweep
Marking Phase
![Page 7: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/7.jpg)
Runtime Suspensions
Performance Auswirkungen
![Page 8: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/8.jpg)
Suspensions
• Alle Anwendungs Threads pausieren
• Auch Young/Minor Collections!
• Antwortzeiten 1:1
• Durchsatz Exponentiell
![Page 9: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/9.jpg)
Suspensions
Serial Collector Parallel Collector
Pause
Pause
Remark
Concurrent
Mark
Concurrent Collector
Concurrent
Sweep
![Page 10: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/10.jpg)
Fragmentierung
Performance Auswirkungen
![Page 11: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/11.jpg)
Speicher nach Sweep
Marking Phase
Fragmentierung
![Page 12: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/12.jpg)
Compacting GC
• Young Generation Copy Collection
• Old Generation (außer CMS)
Fragmentierter Speicher
Speicher nach Kompaktifizierung
![Page 13: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/13.jpg)
CPU Verbrauch
Performance Auswirkungen
![Page 14: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/14.jpg)
CPU Verbrauch
• Zeit ≈ CPU Zeit
• Seriell <≈ Parallel
• Je mehr CPUs desto kürzer Suspension
• Negative Auswirkung auf andere
Prozesse
• CMS single Threaded
![Page 15: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/15.jpg)
Jede JVM ist anders
Die Unterschiede
![Page 16: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/16.jpg)
SUN/ORACLE JVM
Eden
Surv
ior
Surv
ior
Young Tenured
![Page 17: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/17.jpg)
ORACLE JROCKIT
![Page 18: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/18.jpg)
Heap
• Generational
oder
• Kontinuierlicher Heap
Keep
Are
a
Nursery Tenured
![Page 19: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/19.jpg)
Mostly Concurrent
Mark and Sweep
Pause
Final Remark
Concurrent Mark
& remark
Sweep 1. Hälfte
Sweep 2. HälftePause
![Page 20: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/20.jpg)
Compacting Windows
• Inkrementelles Compacting
• Auch bei CMS
Fragmentierter Speicher
![Page 21: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/21.jpg)
Thread-Lokale Allokation
• Separatere Heap Bereiche
• Dynamische Zuteilung
• Keine Synchronisation
Schnellere Allokation
![Page 22: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/22.jpg)
„GROßE“ UND „KLEINE“
OBJEKTE
![Page 23: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/23.jpg)
Permanent Generation?
• Klassen werden wie Objekte behandelt
• Sofortige Garbage Collection möglich!
![Page 24: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/24.jpg)
IBM JVM
![Page 25: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/25.jpg)
Die Unterschiede
• Kontinuierlicher Heap ist Standard
• Allocate und Survivor
• „Große“ und „Kleine“ Objekte
• Keine Permanent Generation
Allo
cate
Surv
ior
Nursery Tenured
![Page 26: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/26.jpg)
TUNING
Garbage Collection
![Page 27: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/27.jpg)
Das Ziel vor Augen halten
![Page 28: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/28.jpg)
GC Strategien
Antwortzeit Durchsatz
Kontinuierlicher Heap Kleine Anwendungen,
Clients, evtl mit CMS
Ja, Parallel GC
Generational Heap Ja Ja, parallel GC
Concurrent Mark and
Sweep
Server Nein, außer wenn
Suspension sensitiv
Parallel GC Young, Nicht old Ja
![Page 29: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/29.jpg)
Richtig Messen
• Suspensions messen
Auswirkung auf Antwortzeit
• Garbage Collection Zeit/CPU messen
• Garbage Collection Häufigkeit messen
![Page 30: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/30.jpg)
JMX Metriken
![Page 31: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/31.jpg)
Echte Auswirkung
![Page 32: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/32.jpg)
Auf die Größe kommt es an
• Objekt stirb Young
• Old Generation abspecken
• Richtiges Verhältnis
![Page 33: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/33.jpg)
Objekt Churning
• Allokiere so viel du willst, aber
– nicht zu viel
– nicht zu lange
• Cachen ist gut, aber
– Nicht zu viel
– Nicht zu kurz
![Page 34: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/34.jpg)
PROBLEME, MYTHEN,
LEGENDEN
![Page 35: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/35.jpg)
Minor vs. Major
• Minor Collections pausieren auch!
• Old Generation ≠ Major Collection
![Page 36: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/36.jpg)
Zu großer Heap
• Lange und teure Garbage Collections
• Caches
– HTTP-Session as Cache
– Soft/Weak Referenzen
• Memory Leaks
![Page 37: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/37.jpg)
Memory Leaks
• Statische veränderliche Variablen
• Thread Lokale Variablen
• JNI
• Equals/Hashcode
• Bi-direktionale Referenzen
![Page 38: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/38.jpg)
Document doc = readXmlDocument();
Node child =
doc.getDocumentElement().getFirstChild();
doc.removeNode(child);
doc = null;
// child hat eine Referenz auf doc,
// daher doc wird nicht freigegeben
Bi-direktionale Referenzen
![Page 39: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/39.jpg)
Classloader Probleme
• Class Loader Leaks
• Mehrfach geladene Klassen
• Zu viele, große Klassen
• Wiederholtes Laden
![Page 40: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/40.jpg)
Out Of Memory
• GC Thrashing
• Transaktionaler Speicherverbrauch
• Große temporare Objekte
• Permanent Generation
![Page 41: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/41.jpg)
Große Temp. Objekte
byte tmpData[] = new byte [1024];
int offs = 0;
do{
int readLen = bis.read (tmpData, offs, tmpData.length -offs);
if (readLen == -1)
break;
offs+= readLen;
if (oofs == tmpData.length){
byte newres[] = new byte[tmpData.length + 1024];
System.arraycopy(tmpData, 0, newres, 0, tmpData.length);
tmpData = newres;
}
} while (true);
![Page 42: JAX 2011 - Garbage collection verstehen](https://reader034.vdocuments.mx/reader034/viewer/2022052602/559ea2e31a28abed618b46c8/html5/thumbnails/42.jpg)
FRAGEN
Michael Kopp
@mikopp
http://blog.dynatrace.com