通过mat获取OOM时对象信息的方法与过程


背景

如果谁的耐心不好, 就让他去看MAT里的objects信息.
有项目出现了OOM的情况
我在公司这边有一台内存比较高的Win10机器.
然后帮助同事进行了dump文件的分析.
为了备忘, 这里简单总结一下.

时间总结

公司网络限速.
总结为: 下载2h,mat分析40min,人工分析50min 总计耗时约4h
分步骤的详细时间为:
1. 虽然公司限速,但是将下载速度提高到了5MB/S左右.(必须百度会员加持)
2. 客户现场因为磁盘限制,没有进行压缩(严重抗议公司节约采购机器的费用)
一个31G堆区的hprof文件大约35G左右.进行了raw模式的上传.
3. 百度会员加持下的百度云盘大于2个小时下载完(3600*5M*2)
4. 然后直接进行mat的分析. mat的堆区设置为50G. 分析时间大约为40min
5. 分析完之后进行简单处理因为卡顿,大约至少要花50min才能基本看完.
6. 同时一个项目使用压缩方式上传dump文件. 35G压缩完4G, 下载20min. 解压缩5min
效率提升较高

分析文件解读

mat 解析完之后第一个界面一般是overview的界面

在biggest Objects By retained size 界面内
左键单击最大的内存区域. 第一步可以选择 Java basics
选中 Thread details
基本上可以确认这个问题的堆栈信息.
注意这一步确认的是 异常的堆栈,但是可能无法判断具体的数据
第二步可以确认有异常的数据 第二步可以选择 List objects
任意选中 incomming 和outcomming 应该都可以(我比较菜不知道两者的区别)
进入objects对象里面.
注意 我这次分析的是 GroupDocs的内存对象. 每一级应该都可以看到具体的对象名
单位为了简单起见, 可以在一级之内进行查看.
这里我的dump 里面一层一共是 116个对象.
挨个点. 大概是在 108个左右就可以看到具体的对象名了.
对象名字的特点为 某个 xlsx 文件. 然后将文件反馈给现场, 就能够根据id查询到具体的文件了
比较好定位问题了就.

尝试分析其他再打开的文件.

好像GroupDocs的方式能够找到具体的文件
但是其他都没有文件打开,所以objects 里面没有具体的对象.
不过既然是水blog 还是多看了一眼redisson的对象信息.
注意不要点 是 super和blocker开头的 的对象信息. 会卡很久. 注意 JAVA-LOCAL 里面可能存很多密钥信息. 比如AMQP里面就比较危险. 产品里面有非常多的redisson的相关进程.
逐个进行打开也没有发现比较奇怪的数据
然并卵 没看懂.

通过mat获取OOM时对象信息的方法与过程的更多相关文章

  1. Java反射获取类和对象信息全解析

    反射可以解决在编译时无法预知对象和类是属于那个类的,要根据程序运行时的信息才能知道该对象和类的信息的问题. 在两个人协作开发时,你只要知道对方的类名就可以进行初步的开发了. 获取类对象 Class.f ...

  2. PHP获取当前文件路径信息的方法

    文件名  test.php 1.__FILE__ 获取 “路径 + 文件名” : /var/www/test/test.php  echo __FILE__; //取得当前文件的路径:用魔术常量 __ ...

  3. Js与Jq 获取浏览器和对象值的方法

    JS and Jquery 都能获取页面元素的宽度,高度和相对位移等数值,那他们之间能相互转换或替代吗,写法又有哪些差异呢?本文将详细为你介绍. 1.Js获取浏览器高度和宽度document.docu ...

  4. [f]智能获取浏览器版本UA信息的方法

    var browser={ versions:function(){ var u = navigator.userAgent, app = navigator.appVersion; return { ...

  5. iOS 获取设备的各种信息的方法

    一.目录结构: 获取屏幕宽度与高度 获取设备版本号 获取iPhone名称 获取app版本号 获取电池电量 获取当前系统名称 获取当前系统版本号 获取通用的唯一识别码UUID 获取当前设备IP 获取总内 ...

  6. ActiveX控件获取不到对象属性或者方法的原因分析

    1.找不到调用的DLL或程序: 2.调用控件方法名称,与定义的函数名称不符合: 3.如果是网站网页调用ActiveX,检查控件是否添加安全对象: 4.如果是网站网页调用ActiveX,检查网页是否加入 ...

  7. appium -ios-安卓 获取元素时 配置参数的方法

    iPhone_5S{ "automationName": "XCUITest", "platformName": "iOS&quo ...

  8. vue在使用ajax获取数据时,两种方法(jquery和vue_resource)

    @{    Layout = null;} <!DOCTYPE html> <html><head>    <meta name="viewport ...

  9. python 面向对象编程、获取对象信息

    面向对象与面向过程 参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0 ...

  10. C#获取当前主机硬件信息

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

随机推荐

  1. 解析Spring内置作用域及其在实践中的应用

    摘要:本文详细解析了Spring的内置作用域,包括Singleton.Prototype.Request.Session.Application和WebSocket作用域,并通过实例讲解了它们在实际开 ...

  2. 从原理带你掌握Spring MVC拦截处理器知识

    摘要:SpringWebMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter,用于处理器进行预处理和后处理. 本文分享自华为云社区<不讲废话,全程干货,0基础带你学习Spring ...

  3. Datahub新版本0.9.1更新,列级别数据血缘功能发布!

    大家好,我是独孤风. 近期Datahub进行了一次大的版本更新,从0.9版本以后Datahub也正式发布了列级别数据血缘的功能. 0.9.1版本又增加了,列的影响分析这个功能. 这样Datahub对于 ...

  4. 火山引擎 DataTester:如何做 A/B 实验的假设检验

    A/B 实验的核心统计学理论是(双样本)假设检验,是用来判断样本与样本.样本与总体的差异是由 抽样误差 引起还是 本质差别 造成的一种统计推断方法. 假设检验,顾名思义,是一种对自己做出的假设进行数据 ...

  5. 报错 PEP 8: expected 2 blank lines, found 1

    PyCharm 提示:PEP 8: expected 2 blank lines, found 1 类或方法前需要空两行 解决方法:Ctrl+Alt+L 格式化一下就OK了.或者手动在前面敲一行

  6. Jenkins Pipeline 流水线 - 完整构建 Pipeline Script 脚本

    Docker Jenkins 安装配置 Windows 2016 安装 Jenkins 前置条件可参考 Jenkins Pipeline 流水线 - 拉代码(SVN) + Maven 编译打包 Jen ...

  7. SpringBoot yml 小格子 变 小叶子

    SpringBoot yml 小格子 变 小叶子 一般添加十多个模块后会出现这样的情况,正常情况下,看POM 文件里的 spring 引用是否异常 一般把 idea 关了再打开试试,有几次我是关了再开 ...

  8. 如何安装和使用 Hugging Face Unity API

    Hugging Face Unity API 提供了一个简单易用的接口,允许开发者在自己的 Unity 项目中方便地访问和使用 Hugging Face AI 模型,已集成到 Hugging Face ...

  9. 国密证书 VS 传统 SSL 证书,到底区别在哪?

    根据 Myssl.com 的统计,目前 99% 的互联网网站使用的是传统 RSA 算法的 SSL 证书.也许你会问,使用传统证书有什么影响吗?现阶段而言,确实没有什么影响.但我国绝大多数网站系统使用的 ...

  10. FB08、F.80凭证冲销校验增强

    1业务场景 当使用FB08和F.80在前台冲销会计凭证时,需要限制三种不同的会计凭证类型,并报消息到相应的程序中处理这三种会计凭证类型. 2技术实现 在BADI和二代中均未找到合适的增强点,因此根据在 ...