0% found this document useful (0 votes)
73 views74 pages

Heap Analyzer 13 WSTE0921

Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
73 views74 pages

Heap Analyzer 13 WSTE0921

Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 74

IBM Software Group

How to use IBM HeapAnalyzer to diagnose Java heap issues


Jinwoo Hwang ([email protected]) IBM HeapAnalyzer Architect/Developer

WebSphere Support Technical Exchange

IBM Software Group

Introduction
Java Heap dump contains a list of all the objects that are in a Java heap. Java Heap dumps could be very large (as much as giga bytes) It's not always easy to analyze large dumps. IBM HeapAnalyzer can analyze IBM Java heap dumps from Java SDK 1.3.1 and 1.4.x. IBM HeapAnalyzer is provided as-is. The top download for 11 consecutive months from the alphaWorks Java technology website (http://www.alphaworks.ibm.com/java) as of September 2005 Used by over 2,000 companies, government agencies, research facilities and universities worldwide Now integrated with WebSphere Application Server V6.0.2

WebSphere Support Technical Exchange

IBM Software Group

Prerequisite
Java 2 SDK/JRE 1.4.1 or higher for runtime of HeapAnalyzer The following exception will be thrown if older versions of SDK/JRE are used: Exception in thread "main" java.lang.NoClassDefFoundError: java/util/regex/PatternSyntaxException IBM Java heap dump generated from IBM SDK 1.3.1 or 1.4.x For more information about getting IBM Java heap dump, refer to MustGather: Out of Memory errors on Windows
http://www-1.ibm.com/support/docview.wss?uid=swg21140641

WebSphere Support Technical Exchange

IBM Software Group

Features
Creates a tree from Java heap dump Calculates size of each objects Calculates total size of each subtree Finds size drop in a subtree Shows gap by size Shows objects by size Shows objects by total size Shows objects by number of child Shows types by size Shows types by count Shows types alphabetical order Shows gap distribution Shows detailed information of an object Finds type with regular expression Drag and drop support in input fields and text Bookmarks in tree navigation Saves/Loads processed heap dumps Locates possible leak suspects

WebSphere Support Technical Exchange

IBM Software Group

How does it work?


Reads IBM Java heap dump file and parse each object/class information Creates graphs based on parsed information Creates trees based on the graphs Runs Java heap leak detection engine to display suspected Java heap leak areas

WebSphere Support Technical Exchange

IBM Software Group

What is IBM Java heap dump


IBM Java Virtual Machine facility generates a dump of all the live objects that are on the Java heap; that is, those that are used by the Java application. This dump is called a IBM Java Heap dump. It shows the objects that are using memory space on the Java heap.

WebSphere Support Technical Exchange

IBM Software Group

Text dump structure


// Header : build identifier of the JVM that produced the dump. Address of object Size of object Name of object References of objects // EOF : summary of the heap dump
// Version: J2RE 1.3.1 IBM Windows 32 build cn131-20020923 0x30000080 [10000] G 0x50001010 [6000] A 0x50002020 0x50002020 [4000] B 0x10007030 0x50006040 0x50004050 0x50003070 [1000] F 0x50004050 0x30000080 0x50004050 [1104] C 0x50005060 0x50005060 [1032] D 0x50003090 0x50005060 0x50006040 [1904] I 0x10007030 0x10007030 [1024] J 0x50003090 [504] E 0xF00090A0 0x50003070 0xF00090A0 [0032] H 0x200000B0 [40000] K 0x50002020 0x200000C0 0x200000C0 [8000] L 0x200000B0 // EOF: //

WebSphere Support Technical Exchange

IBM Software Group

How to generate IBM Java heap dump


IBM Java Heap dump can be generated in either of two ways Explicit generation Java Virtual Machine triggered generation When the Java heap is exhausted, Java Virtual Machine triggered generation is enabled by default. To enable signal-based Java Heap dumps, the IBM_HEAPDUMP=TRUE environmental variable or the appropriate JAVA_DUMP_OPTS must be set.

WebSphere Support Technical Exchange

IBM Software Group

Explicit generation
IBM Java Heap dump can be explicitly generated in either of the following ways By sending a signal to the JVM from the operating system By using the HeapDump() method inside Java code that is being executed For Linux and AIX, send the JVM the signal SIGQUIT (kill -3, or CTRL+\ in the console window). For Windows, generate a SIGINT (press the Ctrl+Break keys simultaneously).

WebSphere Support Technical Exchange

IBM Software Group

Java Virtual Machine triggered generation


The following events automatically trigger the JVM to produce a Java Heap dump A fatal native exception occurs in the JVM (not a Java Exception) An OutOfMemoryError or heap exhaustion condition occurs (optional) If Java Heap dumps are enabled, they are normally produced immediately before a thread dump. They are produced also if the JVM terminates unexpectedly (a crash).

WebSphere Support Technical Exchange

10

IBM Software Group

Location of IBM Java Heap dump


The JVM checks each of the following locations for existence and write-permission, then stores the Heap dump in the first one that is available. The location that is specified by the IBM_HEAPDUMPDIR environment variable, if set The current working directory of the JVM processes The location that is specified by the TMPDIR environment variable, if set The /tmp directory (X:\tmp for Windows, where X is the current working drive) Note that enough free disk space must be available for the Heap dump file to be written correctly.

WebSphere Support Technical Exchange

11

IBM Software Group

Format of Heap dump filenames


Platform Java Heap dump file name format

Windows

heapdump.YYYYMMDD.HHMMSS.PID.txt

Linux & AIX heapdumpPID.TIME.txt

z/OS

HEAPDUMP.YYYYMMDD.HHMMSS.PID.txt

Note: PID is the process ID. TIME is the number of seconds since 1/1/1970
WebSphere Support Technical Exchange 12

IBM Software Group

Creating a graph
0x30000080 [10000] G 0x50001010 [6000] A 0x50002020 0x50002020 [4000] B 0x10007030 0x50006040 0x50004050 0x50003070 [1000] F 0x50004050 0x30000080 0x50004050 [1104] C 0x50005060 0x50005060 [1032] D 0x50003090 0x50005060 0x50006040 [1904] I 0x10007030 0x10007030 [1024] J 0x50003090 [504] E 0xF00090A0 0x50003070 0xF00090A0 [0032] H 0x200000B0 [40000] K 0x50002020 0x200000C0 0x200000C0 [8000] L 0x200000B0
13

WebSphere Support Technical Exchange

IBM Software Group

Definitions
Root object An object for which no (different) object holds a reference. Parent object An object (for example, A) that holds at least one reference to some (different) object (for example, B). In this case, A is said to be the parent of B. Owner object If an object has more than one parent object, a parent object is chosen as owner object. Total size is calculated only with owner objects. Child object An object (for example, B) for which at least one (different) object (for example, A) holds a reference. In this case B is said to be the child of A. Type Collection of same objects Size The size of an object is the amount of memory that is required to hold that object in memory. Total size The subtree size of an object is the sum of its size and the sizes of all the objects that it reached from its children. Note that each object is assigned a unique parent and root during processing. If theres substantial difference in total size between a parent and its child, its called a total size drop.

WebSphere Support Technical Exchange

14

IBM Software Group

Creating a tree with DFS


Create a tree from the previous graph using Depth First Search (DFS) algorithm Sorted by Total Size

WebSphere Support Technical Exchange

15

IBM Software Group

How do I run HeapAnalyzer?


Usage <Java 2 SDK path>java Xmx[heapsize] jar ha<HeapAnalyzer version>.jar For example, java Xmx1000m jar ha135.jar If you see java.lang.OutOfMemoryError while you are processing heapdumps, please try increasing the maximum heap size (-Xmx) value to give the JVM more memory. Maximum heap size should not be larger than the size of available physical memory size for this tool due to performance issue.
16

WebSphere Support Technical Exchange

IBM Software Group

File Menu
Open a heap dump (Automatically detects various formats of IBM Java heap dumps, for example text, compressed text, portable heap dump and HeapAnalyzer format) Save processed heap dump Exit

WebSphere Support Technical Exchange

17

IBM Software Group

Open a Java heap dump


Select File -> Open and select a Java heap dump file

WebSphere Support Technical Exchange

18

IBM Software Group

Open a processed heap dump


If you have a processed heap dump, select File -> Open and select a processed heap dump file which has .ha extension.

WebSphere Support Technical Exchange

19

IBM Software Group

Processing heap dumps


Progress is shown during processing heapdump.

WebSphere Support Technical Exchange

20

IBM Software Group

Processing completed
This is the screen when processing is complete. Please do not close this window until you do not need this heap dump.

WebSphere Support Technical Exchange

21

IBM Software Group

Analysis Menu
Click on Analysis menu and select a menu item for further analysis.

WebSphere Support Technical Exchange

22

IBM Software Group

Tree view
The check icon indicates that it has already been included as a child object of owner object in tree view Each tree node as in the following format: TotalSize[Size] NumberOfChildObject Name Address

WebSphere Support Technical Exchange

23

IBM Software Group

Detailed Node Information


In tree view, you can see detailed information of a node You can search for total size drop between parent and child or you can find an address by selecting a node and clicking on right mouse button.

WebSphere Support Technical Exchange

24

IBM Software Group

Detailed Node Information


This is the screen of detailed node information in heapdump tree

WebSphere Support Technical Exchange

25

IBM Software Group

Find an address
You can find an address in the tree view by selecting the menu Find an address

WebSphere Support Technical Exchange

26

IBM Software Group

Found the address


This is the result of address search in a tree view

WebSphere Support Technical Exchange

27

IBM Software Group

Add Bookmarks
You can bookmark nodes and continue to navigate tree

WebSphere Support Technical Exchange

28

IBM Software Group

Go to Bookmarks
You can see list of bookmarks in Go to Bookmark menu in Tree view menu bar

WebSphere Support Technical Exchange

29

IBM Software Group

Remove Bookmarks
You can remove bookmarks in Remove Bookmark menu in Tree view menu bar

WebSphere Support Technical Exchange

30

IBM Software Group

Got more children?


If you have more children in a parent object, you can see how many more children are hidden By expanding the node, you can see more children

WebSphere Support Technical Exchange

31

IBM Software Group

More children
10 more children are displayed

WebSphere Support Technical Exchange

32

IBM Software Group

Another way to display more children


You can use Show more children menu from parent node

WebSphere Support Technical Exchange

33

IBM Software Group

Locate a leak suspect


You can locate areas where Java heap leak is suspected

WebSphere Support Technical Exchange

34

IBM Software Group

Found a leak suspect?


Found an area where there are relatively excessive number of children

WebSphere Support Technical Exchange

35

IBM Software Group

Compile leak suspects


You can compile list of locate areas where Java heap leak is suspected

WebSphere Support Technical Exchange

36

IBM Software Group

Locate a leak suspect


You can locate areas where Java heap leak is suspected by selecting a leak suspect

WebSphere Support Technical Exchange

37

IBM Software Group

Search for total size drop


Search for total size drop will find a size drop between the total size of a parent and the biggest total size of child of the parent. If you cannot find any size drop from the menu Search for total size drop, you need to decrease Minimum total size drop for search in options.

WebSphere Support Technical Exchange

38

IBM Software Group

Gaps by size
You can review gaps between objects and classes

WebSphere Support Technical Exchange

39

IBM Software Group

Gaps view
This is gaps view

WebSphere Support Technical Exchange

40

IBM Software Group

Objects List
List Objects -> Sort by TotalSize

WebSphere Support Technical Exchange

41

IBM Software Group

Objects by TotalSize
Objects/Classes are sorted by TotalSize

WebSphere Support Technical Exchange

42

IBM Software Group

Objects by Size
Objects/Classes are sorted by their sizes

WebSphere Support Technical Exchange

43

IBM Software Group

Objects by number of child


Objects/Classes are sorted by number of child objects

WebSphere Support Technical Exchange

44

IBM Software Group

Objects by address
Objects/Classes are sorted by address

WebSphere Support Technical Exchange

45

IBM Software Group

Objects by name
Objects/Classes are sorted by name

WebSphere Support Technical Exchange

46

IBM Software Group

Types by Name
List Types -> Sort by Name

WebSphere Support Technical Exchange

47

IBM Software Group

Types by Name
Types are sorted by their names

WebSphere Support Technical Exchange

48

IBM Software Group

Types by Size
Types are sorted by sum of sizes

WebSphere Support Technical Exchange

49

IBM Software Group

Types by frequency/count
Types are sorted by frequency

WebSphere Support Technical Exchange

50

IBM Software Group

Gap Statistics
Analysis -> Gap Statistics

WebSphere Support Technical Exchange

51

IBM Software Group

Gap space view


Gap space distribution view

WebSphere Support Technical Exchange

52

IBM Software Group

Options menu
You can configure setting in View -> Options menu

WebSphere Support Technical Exchange

53

IBM Software Group

Search Objects
Search object -> Sort by TotalSize

WebSphere Support Technical Exchange

54

IBM Software Group

Find types and objects


Address by type to find types include string byte

WebSphere Support Technical Exchange

55

IBM Software Group

Search objects/types
The following is the list of types which have byte in their names.

WebSphere Support Technical Exchange

56

IBM Software Group

Search Objects, Sort by Size


Objects are sorted by Size

WebSphere Support Technical Exchange

57

IBM Software Group

Find a type
You can also enter exact name of a type: java/lang/String to get more information about a type

WebSphere Support Technical Exchange

58

IBM Software Group

Find a type
This is the list of types of java/lang/String

WebSphere Support Technical Exchange

59

IBM Software Group

Status bar
You can hide/show Status bar Status bar is used to display description of each menu

WebSphere Support Technical Exchange

60

IBM Software Group

Console
You can hide/show Console

WebSphere Support Technical Exchange

61

IBM Software Group

Common Exceptions/Errors
Exception in thread "main" java.lang.NoClassDefFoundError: java/util/regex/PatternSyntaxException HeapAnalyzer requires Java 2 SDK 1.4.1 or higher. The exception is thrown if older versions SDK is used: java.lang.StringIndexOutOfBoundsException: String index out of range: 0 at java.lang.String.charAt(Unknown Source) at com.ibm.jinwoo.heap.FileTask$ActualTask.<init>(FileTask.java:386) at com.ibm.jinwoo.heap.FileTask$1.construct(FileTask.java:794) at com.ibm.jinwoo.heap.SwingWorker$2.run(SwingWorker.java:45) at java.lang.Thread.run(Unknown Source) You can see this exception while processing corrupted heapdumps or truncated ones. Truncated or corrupted heapdumps are not reliable

WebSphere Support Technical Exchange

62

IBM Software Group

Common Exceptions/Errors
Exception while parsing line 9 : 0x0x50003070 [1000] java/lang/String java.lang.RuntimeException at com.ibm.jinwoo.heap.FileTask$ActualTask.<init>(FileTask.java:321) at com.ibm.jinwoo.heap.FileTask$1.construct(FileTask.java:794) at com.ibm.jinwoo.heap.SwingWorker$2.run(SwingWorker.java:45) at java.lang.Thread.run(Unknown Source) Some old Linux IBM SDKs generate invalid address in heapdumps. After replacing 0x0x with 0x, HeapAnalyzer can process heapdumps. java.io.IOException: Not in GZIP format at java.util.zip.GZIPInputStream.readHeader(Unknown Source) at java.util.zip.GZIPInputStream.<init>(Unknown Source) at java.util.zip.GZIPInputStream.<init>(Unknown Source) at com.ibm.jinwoo.heap.OpenTask$ActualTask.<init>(OpenTask.java:32) at com.ibm.jinwoo.heap.OpenTask$1.construct(OpenTask.java:111) at com.ibm.jinwoo.heap.SwingWorker$2.run(SwingWorker.java:45) at java.lang.Thread.run(Unknown Source) You can see this exception when you try to load invalid .ha file.

WebSphere Support Technical Exchange

63

IBM Software Group

Common Exceptions/Errors
Format error while parsing line 10 : 0x50004050 0x50004050 Unexpected format in heapdump. Possibly its corrupted heapdump. Further analysis is unreliable.

WebSphere Support Technical Exchange

64

IBM Software Group

Java heap analysis: Example1


Vector v1 = new Vector(); for(int i=0;i<100;i++) { int[] s1 = new int[1000]; long[] s2 = new long[1000]; float[] s3 = new float[1000]; v1.add(s1); v1.add(s2); v1.add(s3); }

WebSphere Support Technical Exchange

65

IBM Software Group

Java heap analysis: Example2


Vector v0 = new Vector(); Vector v2 = v0; for(int i=0;i<100;i++) { Vector v1 = new Vector(); int[] s1 = new int[1000]; long[] s2 = new long[1000]; float[] s3 = new float[1000]; v1.add(s1); v1.add(s2); v1.add(s3); v2.add(v1); v2=v1; }

WebSphere Support Technical Exchange

66

IBM Software Group

How to analyze Java heap


Review number of objects by selecting List Types -> Sort by Count If you see excessive number of objects, pay attention to them. For example, DB2PreparedStatements MQQueueManager

WebSphere Support Technical Exchange

67

IBM Software Group

How to analyze Java heap


Review Tree view Look for areas where excessive number of child with large difference in total size between parent and child

WebSphere Support Technical Exchange

68

IBM Software Group

How to analyze Java heap


You cannot diagnose all problems by analyzing Java heap dumps. Java Heap dumps are just snapshots of Java heap at specific times. Garbage collector trace is another source of information to figure out whats going on with Java heap and garbage collector. To diagnose Java heap usages, enable garbage collector trace and analyze the trace with IBM Pattern Modeling and Analysis Tool for Java Garbage Collector available at http://www.alphaworks.ibm.com/tech/pmat

WebSphere Support Technical Exchange

69

IBM Software Group

How to copy/paste content


KeyBoard Copy: Control-C Paste: Control-V Mouse Select, drag and drop to word processors or editors that support drag and drop

WebSphere Support Technical Exchange

70

IBM Software Group

Memory Dump Diagnostic For Java


Next generation memory leak analysis tool with best-of-breed features from HeapAnalyzer, HeapRoots and Leakbot Technical Preview with WebSphere Version 6.0.2. Download from WebSphere DeveloperWorks: tart WebSphere Technology Previews nd s ad a !
nlo da y! Dow ing to http://www-128.ibm.com/developerworks/websphere/downloads/memory_dump.html us

Fully supported version to be available with IBM Support Assistant

WebSphere Support Technical Exchange

71

IBM Software Group

Main Functions in Memory Dump Diagnostic for Java


Detects Memory Leaks Single Dump Analysis Comparative analysis of two memory dumps Visualizes Memory Dump contents Analyzes Java Memory dumps
IBM heap dumps (text & binary) HPROF dumps SVC dumps (z-series)

Detects growing data structures as opposed to low level objects Shows footprint of application heap usage

WebSphere Support Technical Exchange

72

IBM Software Group

Additional WebSphere Product Resources


Discover the latest trends in WebSphere Technology and implementation, participate in technically-focused briefings, webcasts and podcasts at: www.ibm.com/developerworks/websphere/community/ Learn about other upcoming webcasts, conferences and events: www.ibm.com/software/websphere/events_1.html Join the Global WebSphere User Group Community: www.websphere.org Access key product show-me demos and tutorials by visiting IBM Education Assistant: ibm.com/software/info/education/assistant Learn about the Electronic Service Request (ESR) tool for submitting problems electronically: www.ibm.com/software/support/viewlet/probsub/ESR_Overview_viewlet_swf .html Sign up to receive weekly technical support emails: www.ibm.com/software/support/einfo.html

WebSphere Support Technical Exchange

73

IBM Software Group

Questions and Answers

WebSphere Support Technical Exchange

74

You might also like