Date post: | 09-Jul-2015 |
Category: |
Software |
Upload: | michael-kopp |
View: | 125 times |
Download: | 1 times |
Garbage Collection verstehen
3 JVMs – ähnlich aber doch verschieden
• Langsam? Wann und Warum
• Auswirkungen
• Jede JVM ist anders
• GC Strategien & Richtiges Tuning
• Probleme und Lösungen
Die Basics
GC Roots
Erreichbare Objekte
Nicht Erreichbare
Objekte Garbage
Vergessene Referenz
Memory Leak
GC auf einen Blick
Viele (über)lebende Objekte
=
Lange Garbage Collection
Generational Heap
• Wenige Allokationen
• Viele Überlebende
• Viele Allokationen
• Wenige Überlebende
Marking Phase
Nach Copy PhaseSpeicher nach Sweep
Marking Phase
Runtime Suspensions
Performance Auswirkungen
Suspensions
• Alle Anwendungs Threads pausieren
• Auch Young/Minor Collections!
• Antwortzeiten 1:1
• Durchsatz Exponentiell
Suspensions
Serial Collector Parallel Collector
Pause
Pause
Remark
Concurrent
Mark
Concurrent Collector
Concurrent
Sweep
Fragmentierung
Performance Auswirkungen
Speicher nach Sweep
Marking Phase
Fragmentierung
Compacting GC
• Young Generation Copy Collection
• Old Generation (außer CMS)
Fragmentierter Speicher
Speicher nach Kompaktifizierung
CPU Verbrauch
Performance Auswirkungen
CPU Verbrauch
• Zeit ≈ CPU Zeit
• Seriell <≈ Parallel
• Je mehr CPUs desto kürzer Suspension
• Negative Auswirkung auf andere
Prozesse
• CMS single Threaded
Jede JVM ist anders
Die Unterschiede
SUN/ORACLE JVM
Eden
Surv
ior
Surv
ior
Young Tenured
ORACLE JROCKIT
Heap
• Generational
oder
• Kontinuierlicher Heap
Keep
Are
a
Nursery Tenured
Mostly Concurrent
Mark and Sweep
Pause
Final Remark
Concurrent Mark
& remark
Sweep 1. Hälfte
Sweep 2. HälftePause
Compacting Windows
• Inkrementelles Compacting
• Auch bei CMS
Fragmentierter Speicher
Thread-Lokale Allokation
• Separatere Heap Bereiche
• Dynamische Zuteilung
• Keine Synchronisation
Schnellere Allokation
„GROßE“ UND „KLEINE“
OBJEKTE
Permanent Generation?
• Klassen werden wie Objekte behandelt
• Sofortige Garbage Collection möglich!
IBM JVM
Die Unterschiede
• Kontinuierlicher Heap ist Standard
• Allocate und Survivor
• „Große“ und „Kleine“ Objekte
• Keine Permanent Generation
Allo
cate
Surv
ior
Nursery Tenured
TUNING
Garbage Collection
Das Ziel vor Augen halten
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
Richtig Messen
• Suspensions messen
Auswirkung auf Antwortzeit
• Garbage Collection Zeit/CPU messen
• Garbage Collection Häufigkeit messen
JMX Metriken
Echte Auswirkung
Auf die Größe kommt es an
• Objekt stirb Young
• Old Generation abspecken
• Richtiges Verhältnis
Objekt Churning
• Allokiere so viel du willst, aber
– nicht zu viel
– nicht zu lange
• Cachen ist gut, aber
– Nicht zu viel
– Nicht zu kurz
PROBLEME, MYTHEN,
LEGENDEN
Minor vs. Major
• Minor Collections pausieren auch!
• Old Generation ≠ Major Collection
Zu großer Heap
• Lange und teure Garbage Collections
• Caches
– HTTP-Session as Cache
– Soft/Weak Referenzen
• Memory Leaks
Memory Leaks
• Statische veränderliche Variablen
• Thread Lokale Variablen
• JNI
• Equals/Hashcode
• Bi-direktionale Referenzen
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
Classloader Probleme
• Class Loader Leaks
• Mehrfach geladene Klassen
• Zu viele, große Klassen
• Wiederholtes Laden
Out Of Memory
• GC Thrashing
• Transaktionaler Speicherverbrauch
• Große temporare Objekte
• Permanent Generation
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);
FRAGEN
Michael Kopp
@mikopp
http://blog.dynatrace.com