转: http://blog.csdn.net/zapldy/article/details/7727572
这篇帖子只介绍利用MemoryAnalyzer进行简单的JVM的堆的分析,至于JVM的内部结构是怎么样的,这里不进行分析。好吧,废话不多说;首先如果我们要分析JVM某个时刻的Heap的对象分配情况,我们就必须要dump这个时刻的JVM的heap(堆);有以下几个办法进行dump某个时刻JVM的heap内容:
1、 使用$JAVA_HOME/bin/jmap -dump来触发,
eg:jmap-dump:format=b,file=/home/longhao/heamdump.out <pid>
2、 使用$JAVA_HOME/bin/jcosole中的MBean,到MBean>com.sun.management>HotSpotDiagnostic>操作>dumpHeap中,点击 dumpHeap按钮。生成的dump文件在 java应用的根目录下面。
3、在应用启动时配置相关的参数 -XX:+HeapDumpOnOutOfMemoryError,当应用抛出OutOfMemoryError时生成dump文件。
4、使用hprof。启动虚拟机加入-Xrunhprof:head=site,会生成java.hprof.txt文件。该配置会导致jvm运行非常的慢,不适合生产环境。
利用MemoryAnalyzer进行Heap分析
去eclipse官网上去下载MemoryAnalyzer,可以下载非插件版的,这样MemoryAnalyzer运行起来比较快,如果是eclipse插件版进行可能会导致eclipse卡死。本人下载的版本是MemoryAnalyzer-1.2.0.20120530-win32.win32.x86_64。
一、Java代码样例
package org.ph.javaee.javaheap;
import java.util.Map;
import java.util.HashMap;
/**
* JVMOutOfMemoryErrorSimulator
*
* @author PH
*
*/
public class JVMOutOfMemoryErrorSimulator {
private final static int NB_ITERATIONS = 500000;
// ~1 KB data footprint
private final static String LEAKING_DATA_PREFIX = "datadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadata";
// Map used to stored our leaking String instances
private static Map<String, String> leakingMap;
static {
leakingMap = new HashMap<String, String>();
}
public static void main(String[] args) {
System.out.println("JVM OutOfMemoryError Simulator 1.0");
System.out.println("Author: Pierre-Hugues Charbonneau");
System.out.println("http://javaeesupportpatterns.blogspot.com/");
try {
for (int i = 0; i < NB_ITERATIONS; i++) {
String data = LEAKING_DATA_PREFIX + i;
// Add data to our leaking Map data structure...
leakingMap.put(data, data);
}
} catch (Throwable any) {
if (any instanceof java.lang.OutOfMemoryError) {
System.out.println("OutOfMemoryError triggered! "
+ any.getMessage() + " [" + any + "]");
} else {
System.out.println("Unexpected Exception! " + any.getMessage()
+ " [" + any + "]");
}
}
System.out.println("simulator done!");
}
}
二、设置JVM启动参数
在此我们把JVM堆的最大内存设置为512m,并且让程序运行过程中出现内存溢出的时候会dump当时的JVM对内存的内容,所以需要加上XX:+HeapDumpOnOutOfMemoryError参数;因此按照以下步骤在eclipse中加入启动参数
从以上的输出结果来看,此程序已经抛出了OutOfMemoryError了,并且生成了一个heap文件,文件名为java_pid3880.hprof,下一步我们就可以拿这个文件在MemoryAnalyzer分析了。
三、有时 jmap 导出 dump文件无效,或者提示要用-F 参数导出 ,上次成功过一次 ,忘记记录下来了 ,有时间找下
分享到:
相关推荐
本文将详细介绍如何利用 Eclipse Memory Analyzer (MAT) 工具来诊断并解决 Tomcat 服务器上的 Java 应用程序内存溢出问题。 #### 二、内存溢出的原因及处理思路 ##### 2.1 内存泄露 - **定义**:内存泄露是指不再...
本文将详细介绍MAT在Windows 64位系统中的使用,以及如何利用MAT对dump文件进行分析。 MAT是一款免费且开源的Java内存分析工具,它能够帮助我们识别内存泄漏、分析对象引用链以及计算对象的内存占用情况。在Windows...
这时,我们就需要借助专业的工具进行内存分析,而MemoryAnalyzer(MAT)正是这样一款强大的JVM内存诊断工具。本文将深入探讨MAT的使用方法、功能以及它如何帮助我们解决内存问题。 MAT,全称Memory Analyzer Tool,...
Eclipse Memory Analyzer Tool (MAT) 是一个强大的内存分析工具,可以读取由jmap生成的.hprof文件,进行详细的内存分析。它能帮助我们找到内存泄漏的根源,通过查看支配树、计算DOM大小、查找可疑的大对象等特性,...
当遇到应用程序运行缓慢,频繁出现Full GC,甚至出现OutOfMemoryError等问题时,我们通常需要对堆内存进行深入分析,这就是heapdump工具的作用所在。heapdump工具可以帮助开发者诊断Java应用的内存泄漏、过度对象...
MAT(Memory Analyzer Tool)是Eclipse基金会开发的一款强大的Java内存分析工具,主要用于诊断Java应用程序的内存泄漏和性能问题。在Java应用中,内存泄漏通常是因为某些对象被长时间保留在全局数据结构,如HashMap...
MAT(Memory Analyzer Tools)作为一款强大的内存分析工具,可以帮助我们定位内存泄漏,优化内存使用。 MAT的使用场景主要集中在两个方面:一是出现OutOfMemoryError,此时Full GC无法回收足够的内存,可能表明存在...
从提供的`MemoryAnalyzer-1.2.1.20121105-win32.win32.x86.zip`文件中解压并运行MAT,然后导入刚才生成的`heapdump.hprof`文件。 3. **分析内存泄漏**:MAT提供多种视图来帮助定位问题,其中饼状图是最直观的一种。...
这些流程包括使用IBM提供的内存分析工具,如Memory Analyzer Tool (MAT),以及通过命令行工具如jmap来获取内存转储(heap dump)和运行时内存使用的快照。分析工具可以帮助开发者识别内存中对象的保留树(Retained ...
5. **jmap(Memory Map for Java)**:它可以导出堆内存快照,供其他工具如jhat或MAT进行分析,也可以获取垃圾收集器和堆内存的详细信息。 6. **jstack(Java Thread Stack Trace)**:提供Java线程堆栈信息,用于...
- **工具简介**: MAT (Memory Analyzer Tool) 是一款强大的内存分析工具,能够帮助开发者分析Java程序的内存使用情况。 - **使用方法**: - 下载并安装MAT。 - 打开MAT工具并加载生成的heapdump文件。 - 分析内存...
- **分析Heap Dump文件:** 使用工具如MAT (Memory Analyzer Tool) 的Dominator Tree视图来查找内存占用最高的对象。 - **代码层面分析:** 如果存在内存泄漏或其他内存使用不当的情况,可以使用BTrace等工具进行...
- **Java诊断工具**:例如Eclipse Memory Analyzer (MAT)可以帮助分析Java应用程序的内存使用情况;VisualVM提供了一个用户友好的界面来监控和调试JVM运行的应用程序。 - 通过编写特定类型的异常程序(如...
- Eclipse Memory Analyzer (MAT) 是一款强大的Java内存分析工具,能够帮助开发者识别和解决内存泄漏等问题。 - VisualVM 是另一款强大的工具,它提供了一个统一的界面来监控和故障排查运行中的Java应用程序。特别是...