MAT手册

本文讲述通过MAT分析内存泄露

1、使用Eclipse 分析内存泄露

1.1 MAT

MAT是一款 提供Java内存分析和定位问题的eclipse 插件。帮助RD 找到内存泄露以及找到耗内存的地方

1.2 使用heap dump 获取服务某一时刻的内存映像

heap dump文件是在某一时刻有关服务的完整Java对象的内存映像。它以二进制文件(hprof)存储。里面包含了所有的对象、属性、私有类型以及对象引用。

2、安装

参考《入门前必读文章》

3、创建heap dump

在jvm发生内存溢出的时候就会输出heap dump 文件。只需要配置一下jvm参数 -XX:+HeapDumpOnOutOfMemoryError 即可 。

4、使用MAT

4.1 查看heap dump 文件

一个head dump 文件创建之后,可以通过eclipse查看。如果是使用MAT创建的文件,则会自动打开文件。

刷新项目,双击文件,然后选择泄露可疑报告(Leak Suspects Report)即可。

从overview 页开始heap dump文件。支配树(Dominator tree)能够快速展现一个用户使用对象的概述。

在Dominator tree 页面,可以看出谁使用了这个引用。 可以选中一个条目,然后选择 “Find shortest path to GC root”。

4.2 使用eclipse 分析Android

Android 也可以输出应用服务的heap dumps. 在DDMS 透视图中使用 “Dump HRPOF file” 就可以创建一个heap dump文件。

Android heap dump 文件的格式跟Java的类似,不完全相同。MAT可以直接分析Android heap dump 文件。

5、案例

创建Java项目

package com.vogella.mat.first;

import java.util.ArrayList;
import java.util.List;

public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        while (1<2){
            list.add("OutOfMemoryError soon");
        }

    }

}

在IDE上添加jvm参数 -XX:+HeapDumpOnOutOfMemoryError

运行项目,一会就会crash, 并且会输出一个heap dump 文件。打开heap dump 开始你的MAT之旅吧。

6、jconsole

也可以使用Java自带的jconsole来输出heap dump文件。直接使用命令行就可以。

要想使用jconsole,需要添加如下参数 -Dcom.sun.management.jmxremote

jconsole的常用用法

http://www.oracle.com/technetwork/java/index.html https://docs.oracle.com/javase/1.5.0/docs/guide/management/jconsole.html

参考文献

原文地址: http://www.vogella.com/tutorials/EclipseMemoryAnalyzer/article.html

results matching ""

    No results matching ""