码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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命令获得)
          jmap -dump:format=b,file=file_name <pid>
          
          • 1

    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

  • 相关阅读:
    ContextMenuStrip内容菜单源对象赋值学习笔记(含源码)
    【Kubeedge小白安装教程】Centos7.9+K8Sv1.22.17(kubeadm)+Kubeedgev1.13.1部署教程详解(NodePort)----亲测过
    Python实现AES算法和国密SM4算法
    变量、流程控制与游标20221027
    Spring Boot中消息是什么?同步异步消息是啥/都包含那些技术?Activate MQ消息怎么整合
    使用echarts做一个空气质量指数仪表盘, 对接天气接口, 附源码
    【已解决】ModuleNotFoundError: No module named ‘sklearn‘
    通讯录的实现
    【Django框架】——18 Django模型学习总结
    如何解决fgets读取popen内容阻塞的问题
  • 原文地址:https://blog.csdn.net/u014454538/article/details/133519911
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号