测试环境
Java : JDK1.6
Tomcat: Tomcat 5.5
Eclipse Memory Analyzer:EMA 1.2.1(直接去Eclipse下载,无需安装哈)
获得Heap Dump文件
Eclipse Memory Analyzer是针对Heap Dump文件进行分析的,因此第一步就是要获得Heap Dump文件。
步骤:
获得线程ID。启动jconsole.exe,它位于jdk目录下的bin目录,jconsole是jdk自带的一个内存分析工具,它提供了图形界面。可以查看到被监控的jvm的内存信息,线程信息,类加载信息,MBean信息。
此处我们可以找到需要检测的Tomcat的线程ID。
获得Heap Dump文件。使用jmap来获得Heap Dump文件,命令行如下:
jmap -dump:format=b,file=heap.bin 3888
此处3888就是Tomcat对应的线程ID
生成分析报告
启动MemoryAnalyzer.exe,打开指定的Heap Dump文件。File -> Open Heap Dump
MAT针对指定的Heap Dump文件进行分析,生成内存泄露检测报告
看懂分析报告
要想看懂EAT的报告,与其到网上去找各种神贴,不如老老实实找本书,先简单复习下JVM的Heap是怎么工作滴?gc的大概一个工作机制。否则EAT的报告就像天书一样。EAT只是工具,不是目的。