Memory Analysis Simplified
Automated Heap Dump Analysis
for Developers, Testers and Technical
Support Employees
Andreas Buchen, SAP
© 2008 by SAP AG; made available under the EPL v1.0 | March 19, 2008
Eclipse Memory Analyzer
• Provide General Purpose Tooling to analyze Java
Heap Dumps.
• Report automatically detected Leak Suspects.
• Stable Code Basis donated by SAP.
• Pluggable
Heap Formats
Application Knowledge
Heap Inspections
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
Agenda
• Automation for Technical Support Staff
Leak Suspects
Memory Intensive Threads
• Automation for Developers
• Questions & Answers
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
Support Use Case – Goals
• Find Leaks without immediate Familiarity and
Expertise with the Java Code at hand
• Search if the Issue is known (and a Fix available)
• Forward to the responsible Development Support
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
Support Use Case – Scenario
VM throws an Out Of Memory Error
-XX:+HeapDumpOnOutOfMemoryError
1101010
0101010
The Heap Dump is a Snapshot of all Objects
0111111
alive at one Point in Time: objects, classes, class
loaders.
Parse & Report Leak Suspects
Developer continues Analysis Interactively
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
Demo
• Parse Heap Dump
• Investigate Leak Report
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
One Big Object
Any up-to-date
architecture loads
components with
separate class loaders,
be it OSGi or JEE
application
servers.
Extensible to display
meaningful names.
Loaded by Class Loader
Keywords
Search tuple:
Identify if problem
is known.
Less ping-pong of
trouble tickets.
Classification for trouble ticket system
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
Shortest Paths to the Accumulation Point Who is keeping
the leak suspect
alive?
Accumulation Point in the Dominator Tree What is kept alive
by the leak
suspect?
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
A Simple Object Graph
LinkedList
header
next
LinkedList$Entry
previous
element
String
value
char[]
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
How to Calculate the Retained Size
The Retained Size of an
Object X is the Memory
X that would be freed by
the Garbage Collector if
no References to the
Object X would exist.
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
How to Calculate the Retained Size (2)
• To calculate the Retained Size, one removes any
References to the object and marks all Objects
reachable from the GC Roots. The sum of the Shallow
Sizes of the non-marked Objects is the Retained Size.
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
Garbage Collection (GC) Roots
• GC Roots are objects that are assumed to be
reachable. Typically, these include all objects
referenced from the current call stacks and classes
loaded by the system class loader.
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
Dominator Tree: Transformation into a “Keep-
Alive” Tree
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
Dominator Tree
• The Dominator Tree is a Transformation of the Cyclic
Object Graph into a „Keep-Alive“ Tree:
Every Node in the Tree is directly responsible for keeping
alive its Children.
“X dominates Y if all paths from the roots to Y run through X”
http://en.wikipedia.org/wiki/Dominator_%28graph_theory%29
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
Dominator Tree – Benefits
Fast Calculation of the Retained Size (sum all children)
List of Distinct Big Objects (first Level of the Tree)
Fast Identification of responsible Objects (just go up the tree)
http://en.wikipedia.org/wiki/Dominator_%28graph_theory%29
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
What is a Leak Suspect?
Leak Suspect Top Level Object in
Dominator Tree above
a given Threshold
Dominator Tree
Accumulation Point Significant Drop in the
Retained Sizes!
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
Who is Keeping the Leak Suspect Alive?
Shortest Path(s) to
Note: All Paths must go
GC Roots
through the Parent Nodes, but
not necessarily directly (see
Linked List Example).
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
What Is Kept Alive by the Leak Suspect?
The Retained Set of the
Accumulation Point
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
Agenda
• Automation for Technical Support Staff
Leak Suspects
Memory Intensive Threads
• Automation for Developers
• Questions & Answers
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
Demo
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
Thread Name
Request URL
More Request Details (Parameters etc.)
provided by Pluggable Request Resolvers
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
What are we doing? (No Magic)
If the Suspect is a Thread, then Thread
<Java Local>
name
Dominator Tree
Extract Request Activity
from <Java Local>s
Objects currently referenced
from the call stack of the
thread are marked <Java
Local>
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
Agenda
• Automation for Technical Support Staff
Leak Suspects
Memory Intensive Threads
• Automation for Developers
• Questions & Answers
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
Developer Use Case - Goals
• Limit Analysis to Components, not the whole Heap
• Report on Memory Consumption & Leaks
Excessive Use of Empty Collections
Duplicate Strings
Leaking OSGi Bundles
…
• Drill-Down to the last Bits of the Object Graph (if
necessary)
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
Demo
• Investigate Memory Consumption per Component
• “Leaking” Eclipse Bundles
• Finalizer
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
Degenerated Maps
HashMap
table
key
HashMap$Entry
value
next
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
Finalizer
• A Finalizer is a method that is executed when an
object is garbage collected.
obj = new Object() GC
obj added to GC
obj becomes finalization queue obj reclaimed
unreachable
obj finalized
time
How to Handle Java Finalization's Memory-Retention Issues: http://java.sun.com/developer/technicalArticles/javase/
finalization/
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
In Memory Analyzer run
Java Basics Finalizer Overview
Finalizer in the Heap
Object currently processed
Objects ready for Finalization in
Processing Order
The Finalizer Thread Object
Object currently processed
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
Agenda
• Automation for Technical Support Staff
Leak Suspects
Memory Intensive Threads
• Automation for Developers
• Questions & Answers
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
Infos & Download
Eclipse
http://www.eclipse.org/mat/
Forum
eclipse.technology.memory-analyzer
(Old WIKI @ SAP)
• Download, Screen Cam, FAQ
https://www.sdn.sap.com/irj/sdn/wiki?path=/display/
Java/Java+Memory+Analysis
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0
Legal Notices
• Java and all Java-based trademarks are trademarks of
Sun Microsystems, Inc. In the United States, other
countries, or both.
• Other company, product, or service names may be
trademarks or service marks of others.
Memory Analysis Simplified | Automated Heap Dump Analysis | © 2008 by SAP AG; made available under the EPL v1.0