`

使用Eclipse Memory Analyzer进行内存泄漏分析三部曲

    博客分类:
  • java
阅读更多
一、准备工作
分析较大的dump文件(根据我自己的经验2G以上的dump文件就需要使用以下介绍的方法,不然mat会出现oom)需要调整虚拟机参数
找个64位的系统在MemoryAnalyzer.ini设置-Xmx2g
如果是32位的xp可以使用下面的方法进行尝试:
  • 安装jrockit 6.0的JDK
  • mat使用jrockit的jdk来启动
  • -vm
    D:/Program Files/Java/jrockit-R28.0.0-jre1.6.0_17/bin/jrockit/jvm.dll
    -vmargs
    -Xmx1700m
    


    二、开始使用MAT进行OOM分析
    第一步,启动mat ,选择File->Open Heap Dump 选择你的dump文件。下面开始等待,mat解析dump文件需要花一些时间,在解析的同时会在硬盘上写入一些解析结果文件,这样下次打开时速度会快很多。有时候mat在解析过程中可能会出现出错的情况,这个时候可以将那些临时文件删除以后重试第一步,如果你的rp够好的话重试也许会解析成功。

    第二步,查看内存泄漏分析报表。mat解析完成以后会出现如下图的提示:

    因为我们就是为了查找内存泄漏的问题,所以保持默认选项直接点“Finish”就可以。
    Mat会非常直观的展现内存泄漏的可疑点,类似下面的报表可以直接看到某个线程占用了大量的内存

    问题的详细分析信息:


    第三步,开始寻找导致内存泄漏的代码点。这时往往需要打开对象依赖关系树形视图,点击如图按钮即可。

    这时会看到如下视图

    这个视图的左边大区域可以看到对象的依赖关系,选中某个对象以后可以在左边小窗口查看对象的一些属性。如果属性的值是一些内存地址你还可以点击工具栏的搜索按钮来搜索具体的对象信息。在进行具体分析的时候MAT只是起了帮助你进行分析的工具的功能,OOM问题分析没有固定方法和准则。只能发挥你敏锐的洞察力,结合源代码,对内存中的对象进行分析从而找到代码中的BUG.

    使用贴士:
    关于shallow size、retained size(摘自http://www.360doc.com/content/11/0830/16/4520139_144514377.shtml)
    Shallow size就是对象本身占用内存的大小,不包含对其他对象的引用,也就是对象头加成员变量(不是成员变量的值)的总和。在32位系统上,对象头占用8字节,int占用4字节,不管成员变量(对象或数组)是否引用了其他对象(实例)或者赋值为null它始终占用4字节。故此,对于String对象实例来说,它有三个int成员(3*4=12字节)、一个char[]成员(1*4=4字节)以及一个对象头(8字节),总共3*4 +1*4+8=24字节。根据这一原则,对String a=”rosen jiang”来说,实例a的shallow size也是24字节

    Retained size是该对象自己的shallow size,加上从该对象能直接或间接访问到对象的shallow size之和。换句话说,retained size是该对象被GC之后所能回收到内存的总和。为了更好的理解retained size,不妨看个例子。

    把内存中的对象看成下图中的节点,并且对象和对象之间互相引用。这里有一个特殊的节点GC Roots,正解!这就是reference chain的起点。

    从obj1入手,上图中蓝色节点代表仅仅只有通过obj1才能直接或间接访问的对象。因为可以通过GC Roots访问,所以左图的obj3不是蓝色节点;而在右图却是蓝色,因为它已经被包含在retained集合内。
    所以对于左图,obj1的retained size是obj1、obj2、obj4的shallow size总和;右图的retained size是obj1、obj2、obj3、obj4的shallow size总和。obj2的retained size可以通过相同的方式计算。

    如何查看某一个对象占用的内存空间
    1.按以下方式打开新窗口即可

    2.输入类名(输入类的全名)


    • F3.pdf (171.7 KB)
    • 描述: mat介绍
    • 下载次数: 586
    分享到:
    评论
    6 楼 wizard_hu 2016-04-28  
    [i]
    引用
    [img][url]
    [flash=200,200][flash=200,200][url][url][img][list]
    [*] :x :x :x :x :x :x :x :x :x :x :x :x :x :x :x :x
    [/list][/img][/url][/url][/flash][/flash]
    [/url][/img]
    [/i]
    5 楼 xiajunhust 2016-04-10  
    sqtds 写道
    文章写的很好,浅显易懂!!!
    com.taobao.top呵呵



    看来楼主是淘宝开放平台的,哈哈~
    4 楼 zhylandroid 2015-07-02  
      
    3 楼 sqtds 2012-08-20  
    文章写的很好,浅显易懂!!!
    com.taobao.top呵呵
    2 楼 jiangsha 2012-07-04  
    我的232m的都报oom,用的还是rcp的mat,
    -vmargs
    -Xmx1024m
    1 楼 makemyownlife 2012-06-29  
    文字写得很详细 共勉 哈哈

    相关推荐

      一次使用Eclipse Memory Analyzer分析Tomcat内存溢出

      ### Eclipse Memory Analyzer (MAT) 分析 Tomcat 内存溢出详解 #### 一、引言 在软件开发过程中,特别是在 Java 应用程序中,内存管理是非常关键的一环。当应用程序遭遇 `OutOfMemoryError` 异常时,通常意味着...

      java堆内存分析工具EclipseMemoryAnalyzer

      Eclipse Memory Analyzer 是一个功能丰富且轻量的 Java 堆内存分析工具,可以用来辅助发现内存泄漏减 少内存占用。 使用 Memory Analyzer 来分析生产环境的 Java 堆转储文件,可以从数以百万计的对象中快速计算出对 ...

      Eclipse Memory Analyzer中文使用说明(带书签)

      - 除了 Memory Analyzer,还有其他内存分析工具,如 JProfiler、VisualVM 等,它们也可以帮助诊断和解决 Java 内存问题。 通过深入理解和熟练运用这些知识点,你可以有效地利用 Eclipse Memory Analyzer 工具,...

      Eclipse Memory Analyzer1.8.1&安装使用指南

      Eclipse Memory Analyzer,通常简称为MAT(Memory Analyzer Tool),是一款由Eclipse基金会开发的强大内存分析工具,主要用于诊断Java应用程序的内存泄漏和优化内存使用。它提供了深入的heap dump分析,帮助开发者...

      Eclipse Memory Analyzer1.8.1&安装使用指南.zip

      Eclipse Memory Analyzer(MAT)是一款强大的Java内存分析工具,它被广泛用于诊断和解决Java应用程序中的内存泄漏问题。MAT 1.8.1是适用于macOS的特定版本,旨在帮助开发者深入理解并优化他们的Java应用内存使用情况...

      Eclipse Memory Analyzer 中文文档

      MAT是IBM开发的一款强大的Java堆内存分析工具,它能对Java应用程序的heap dump文件进行深入分析,找出可能存在的内存泄露问题。MAT的核心功能包括: 1. **对象分配追踪**:通过分析内存快照,MAT可以展示每个对象的...

      Eclipse Memory Analyzer1.11 (JDK8)

      Eclipse Memory Analyzer1.11 官方下载,适用于JDK8。 加压后直接点击MemoryAnalyzer.exe,不用安装。

      Eclipse Memory Analyzer (Mac版)

      Eclipse Memory Analyzer(MAT,全称Memory Analyzer Tool)是一款强大的Java内存分析工具,尤其在Mac平台上,它提供了独立于Eclipse环境的版本,方便开发者直接使用。MAT的主要目标是帮助开发者诊断和解决Java应用...

      使用 Eclipse Memory Analyzer 进行堆转储文件分析_files

      Eclipse Memory Analyzer(MAT)是一款强大的Java内存分析工具,它能帮助开发者诊断和解决与内存泄漏、内存占用过高以及垃圾收集性能问题相关的问题。在Java应用程序中,如果内存管理不当,可能会导致系统运行缓慢,...

      堆dump分析工具Eclipse Memory Analyzer

      总之,Eclipse Memory Analyzer是Java开发者诊断内存问题不可或缺的工具,它通过丰富的视图和报告,使复杂的内存分析变得直观易懂,帮助开发者优化内存管理,提高应用的稳定性和性能。通过熟练掌握MAT,开发者可以...

      Eclipse Memory Analyzer内存映像分析工具

      Eclipse Memory Analyzer(MAT)是一款强大的Java虚拟机(JVM)内存分析工具,它能够帮助开发者定位并解决Java应用程序中的内存泄漏问题。MAT通过解析.hprof文件,即Java虚拟机生成的内存快照,来展示堆内存的详细...

      mat内存分析工具单独软件无需安装-Eclipse Memory Analyzer Version 1.7.0.rar

      MAT(Memory Analyzer Tool)是Eclipse项目开发的一款强大的Java内存分析工具,主要用于诊断Java应用程序的内存泄漏和性能问题。在标题中提到的“Eclipse Memory Analyzer Version 1.7.0.rar”是一个压缩包,其中...

      MAT(Memory Analyzer Tool)内存分析工具的安装与使用

      MAT是分析Java堆内存的一个工具,全称是 The Eclipse Memory Analyzer Tool,用来帮助分析内存泄漏和减少内存消耗。使用MAT分析Java堆快照,可以快速计算出对象的保留大小(Retained Sizes),查找到阻止对象被回收...

      Eclipse--Memory-Analyzer中文教程

      Eclipse Memory Analyzer(内存分析器)是一款专门为Java堆内存分析而设计的工具,它可以协助开发者快速地分析内存泄漏问题,通过生成的报告指出潜在的内存泄漏可疑点。Memory Analyzer可以单独使用,也可以作为...

      EclipseMemoryAnalyzer-x86_64

      Eclipse Memory Analyzer(MAT)是一款强大的Java内存分析工具,尤其适用于诊断和解决Java应用程序中的内存泄漏问题。这个工具是Eclipse基金会的一个项目,提供了一个直观的用户界面来帮助开发者深入理解堆内存的...

      EclipseMemoryAnalyzer使用教程.rar

      Eclipse Memory Analyzer(MAT)是Eclipse基金会提供的一款强大的Java内存分析工具,它主要用于诊断Java应用程序的内存泄漏问题。MAT通过分析heap dump文件,能够帮助开发者深入理解内存消耗的细节,找出内存占用过...

      MemoryAnalyzer分析内存泄露工具

      MemoryAnalyzer软件可以帮你进行发现或者分析调试的代码等无法进行修复的问题;支持分析内存问题.;支持监控整个 Java 应用程序的状态与行为.还可以进行读取,使应用程序运行时可以支持让Java 运行时环境的生产

      memory analyzer 内存泄露

      MemoryAnalyzer,通常简称为MAT,是由Eclipse基金会开发的一款强大的Java堆内存分析工具。它能帮助开发者定位并解决Java应用程序中的内存泄露问题。MAT通过分析heap dump文件(即Java虚拟机的堆内存快照),提供详尽...

      MemoryAnalyzer、phd格式内存分析工具

      MemoryAnalyzer,即MAT(Memory Analyzer Tool),是一款由Eclipse基金会开发的强大的Java内存分析工具,尤其适用于IBM JVM(openj9)上的heap dump文件分析。本文将详细介绍MemoryAnalyzer的特性和功能,以及如何...

    Global site tag (gtag.js) - Google Analytics