Wer kennt (und fürchtet) ihn nicht: Den java.lang.OutOfMemoryError. Er ist oft ein Hinweis auf ein Speicherleck, und ein solches zu finden ist nicht einfach: denn die Schwachstelle ist bestens versteckt, die Exception gibt in der Regel keinen Hinweis auf die Stelle des Fehlers.
In diesem Workshop lernen wir, wie Speicherlecks entstehen und wie man den Ursachen des Lecks auf die Spur kommen kann, u. a.:
- Wie organisiert die JVM den Speicher (Bereiche, Garbage Collection, etc.)?
- Wie sehen typische Lecks aus? Warum kann die Garbage Collection diesen Speicher nicht mehr freigeben?
- Wie erhalte ich einen Heap Dump, um ein Leck analysieren zu können?
- Mit welchen Tools kann ich einen Heapdump analysieren?
- Wie unterstützen mich diese Tools beim Finden des fehlerhaften Codes?
In Übungen analysieren wir Beispielanwendungen, welche Speicherlecks enthalten. Wir analysieren deren Heap Dumps und erhalten dabei Hinweise auf Codeabschnitte, die fehlerhaft implementiert sein könnten.
Themenblöcke
Grundlagen
- Einführung in das Java Memory Modell
- Erzeugen von Heap Dumps
- Einführung in Eclipse MAT
- Dominator-Bäume und Navigation im Objektgraph
- Übung: Analyse eines einfachen Memory Leaks
Java Persistence API
- Einschub: Referenzen in Java
- Übung: Analyse eines Memory Leaks in einer JPA-Anwendung
Application Server
- Trennung von Anwendungen über ClassLoader
- ThreadLocals
- Übung: Analyse von Memory Leaks in Application-Server-Anwendungen
Fortgeschrittene Themen
- Einschub: Native Memory Leaks
- Übung: Analyse eines (nachgestellten) echten Produktionsproblems
- Weitere Eclipse MAT Features
- Microservices: Sind Memory Leaks noch relevant?
- Heap Dumps und Datenschutz
Voraussetzungen
Für die praktischen Übungen stellen wir eine Linux VM (Ubuntu) für VirtualBox bereit. Bitte bringt dazu einen Laptop mit, auf dem Ihr Administratorrechte besitzt oder auf dem bereits eine VirtualBox-Installation in Version 5.x vorhanden ist. Für die VM benötigt Ihr ca. 20 GB freien Speicherplatz auf Eurem Laptop. Wir verteilen die Umgebung in Form von USB-Sticks.
Installiert idealerweise im Vorfeld ein Oracle VirtualBox. Wir werden zusätzlich VirtualBox-Installer für Windows, OSX, Ubuntu 18.x und openSUSE 15.0 als Teil der SEU mitbringen.
Falls eine der obigen Voraussetzungen Probleme bereitet, meldet Euch schnellstmöglich bei uns. Wir versuchen dann eine alternative Lösung bereitzustellen.
Für die Durchführung der Übungen solltet Ihr grundlegende Kenntnisse objektorientierter Sprachen mitbringen. Grundlegende Java-Kenntnisse sind von Vorteil. Alle Programmieranteile in den Übungen sind aber optional.