There are
multiple tools available to analyse java heap dump. In this post, I am going to
explain how to analyse heap dump using jhat, eclipse MAT (Memory Analyzer
Tool).
Generate
heap dump Programmatically
Step 1: Get the hotspot diagnostic MBean from
the platform MBean server.
MBeanServer
server = ManagementFactory.getPlatformMBeanServer();
HotSpotDiagnosticMXBean
hotspotMBean = ManagementFactory.newPlatformMXBeanProxy(server,
"com.sun.management:type=HotSpotDiagnostic",
HotSpotDiagnosticMXBean.class);
Step 2: Use dumpHeap method of
HotSpotDiagnosticMXBean to generate heap dump.
void
dumpHeap(String outputFile, boolean live)
Dumps the
heap to the outputFile file in the same format as the hprof heap dump. If the parameter
'live' is set to then this method dump only live objects i.e. objects that are
reachable from others
Example
hotspotMBean.dumpHeap(fileName,
true);
Find the
below working application.
HeapDumpUtil.java
package com.sample.app.util;
import java.io.IOException;
import java.lang.management.ManagementFactory;
import javax.management.MBeanServer;
import com.sun.management.HotSpotDiagnosticMXBean;
public class HeapDumpUtil {
private static final String HOTSPOT_BEAN_NAME = "com.sun.management:type=HotSpotDiagnostic";
private static HotSpotDiagnosticMXBean hotspotMBean = null;
/* Get the hotspot diagnostic MBean from the platform MBean server */
private static HotSpotDiagnosticMXBean getHotspotMBean() throws IOException {
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
return ManagementFactory.newPlatformMXBeanProxy(server, HOTSPOT_BEAN_NAME, HotSpotDiagnosticMXBean.class);
}
public static void generateHeapDump(String fileName) throws IOException {
if (hotspotMBean == null) {
synchronized (HeapDumpUtil.class) {
if (hotspotMBean == null) {
hotspotMBean = getHotspotMBean();
}
}
}
hotspotMBean.dumpHeap(fileName, true);
}
}
App.java
package com.sample.app;
import java.io.IOException;
import com.sample.app.util.HeapDumpUtil;
public class App {
public static void main(String args[]) throws IOException {
HeapDumpUtil.generateHeapDump("dump1.hprof");
}
}
Run
App.java, you can see that dump file is generated with name dump1.hprof.
Use
jhat to analyze heap dump
Execute
below command to analyze heap dump.
jhat -port
7401 -J-Xmx4G dump1.hprof
$jhat -port 7401 -J-Xmx4G dump1.hprof
Reading from dump1.hprof...
Dump file created Mon Oct 07 08:56:44 IST 2019
Snapshot read, resolving...
Resolving 18355 objects...
Chasing references, expect 3 dots...
Eliminating duplicate references...
Snapshot resolved.
Started HTTP server on port 7401
Server is ready.
One the server is ready, open the url ‘http://localhost:7401/’, you can see all the heap information.
Using
Eclipse MAT
You can go
through my below post.
https://self-learning-java-tutorial.blogspot.com/2015/01/eclipse-memory-analyzer-tool-mat.html
No comments:
Post a Comment