Eclipse MAT解析headp dump,total size小于file size

1. 问题描述

  • 使用Eclipse MAT分析20GB+的heap dump文件

  • 最后解析出来dump size只有1GB+

2. 原因:heap dump中包含许多unreachable objects

  • Eclipse MAT的官方文档,《Basic Tutorial》章节,有对上图的Overview page做介绍

  • 针对total size小于file size的情况,有专门说明:

    If the total size of the dump is much smaller than the size of the file it is possible that the heap dump contained many 'garbage' objects which would be discarded at the next garbage collection. See the unreachable objects query to examine these 'garbage' objects.

  • 翻译过来就是:

    • heap dump包含许多垃圾对象,这些对象在下一次GC时可以回收,
    • 一般情况下,这些对象对于分析内存泄露来说是不重要的,MAT会在解析heap dump的过程中删除这些对象
  • MAT对unreachable objects出现原因的分析:

    • 如果heap dump是因为OOM产生的,JVM通常会进行GC操作以试图为新对象释放空间,这时heap dump文件中将不会包含unreachable objects
    • 如果并未执行GC操作,heap dump文件中就可能存在unreachable objects。
      • 例如,需要分配的空间非常大,即使进行GC操作也无法满足需求

      • 或者由于其他事件触发了heap dump(上述heap dump文件就是笔者通过jmap命令获得)

        bash 复制代码
        jmap -dump:format=b,file=file_name <pid>

3. 如何查看unreachable objects?

3.1 方法1:基于已有的解析,直接查看

3.1.1 Overview页面的link查看

  • 在Overview页面,通过 Unreachable Objects Histogram链接点击查看
  • 进入以后可以看到,unreachable objects有19GB左右,加上之前的1.4GB,与整个heap dump文件的大小是一致的

3.1.2 通过 Query Browser 查看

  • 通过工具栏,Query Browser → \rightarrow → Java Basics → \rightarrow → Unreachable Objects Histogram,查看unreachable objects

3.2 重新分析heap dump

  • 清理缓存:Window → \rightarrow → Heap Dump History → \rightarrow → 找到对应的heap dump文件 → \rightarrow → 右键,Delete Index Files
  • 允许MAT保留unreachable objects:Window → \rightarrow → Preferences → \rightarrow → Memory Analyzer → \rightarrow → 勾选'Keep unreachable objects' → \rightarrow → Apply and Close
  • 重新打开heap dump文件,这次MAT将不会丢弃unreachable objects
相关推荐
步行cgn2 小时前
Spring 基于 XML 的自动装配:byName 详解
java·后端·spring
大帅点兵2 小时前
Apache Ant 1.9.9 完整讲解
java
LuTshoes3 小时前
spring ai 实战 手搓 PlaneExecuteAgent
java·人工智能·spring·ai
这料鬼有毒3 小时前
二刷hot100-73.矩阵置零
java
caoerzhong3 小时前
JeeWMS 开源仓库管理系统二次开发与接口对接实战:Java WMS 如何与 ERP、MES 和自动化设备打通
java·开源
长谷深风1113 小时前
评测AI Agent:三种裁判各司其职
java·大数据·开发语言·人工智能·ai agent
边境悍匪3 小时前
蜗牛学苑 Java 智能体学习 Day42|项目周开发技术汇总 1 思维导图复盘
java·开发语言·spring boot·学习·spring
槑有烦恼4 小时前
Java 字符串 & List集合 高频易错真题复盘(含全部错题+修正)
java
语戚4 小时前
力扣 1621. 大小为K的不重叠线段的数目:动态规划(Java 实现)
java·算法·leetcode·动态规划·力扣·dp
君顾14 小时前
本地托管机构管理源码实战:需求拆解、数据建模与多端部署
java·开发语言·托管