通过mat获取OOM时对象信息的方法与过程
通过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时对象信息的方法与过程的更多相关文章
- Java反射获取类和对象信息全解析
反射可以解决在编译时无法预知对象和类是属于那个类的,要根据程序运行时的信息才能知道该对象和类的信息的问题. 在两个人协作开发时,你只要知道对方的类名就可以进行初步的开发了. 获取类对象 Class.f ...
- PHP获取当前文件路径信息的方法
文件名 test.php 1.__FILE__ 获取 “路径 + 文件名” : /var/www/test/test.php echo __FILE__; //取得当前文件的路径:用魔术常量 __ ...
- Js与Jq 获取浏览器和对象值的方法
JS and Jquery 都能获取页面元素的宽度,高度和相对位移等数值,那他们之间能相互转换或替代吗,写法又有哪些差异呢?本文将详细为你介绍. 1.Js获取浏览器高度和宽度document.docu ...
- [f]智能获取浏览器版本UA信息的方法
var browser={ versions:function(){ var u = navigator.userAgent, app = navigator.appVersion; return { ...
- iOS 获取设备的各种信息的方法
一.目录结构: 获取屏幕宽度与高度 获取设备版本号 获取iPhone名称 获取app版本号 获取电池电量 获取当前系统名称 获取当前系统版本号 获取通用的唯一识别码UUID 获取当前设备IP 获取总内 ...
- ActiveX控件获取不到对象属性或者方法的原因分析
1.找不到调用的DLL或程序: 2.调用控件方法名称,与定义的函数名称不符合: 3.如果是网站网页调用ActiveX,检查控件是否添加安全对象: 4.如果是网站网页调用ActiveX,检查网页是否加入 ...
- appium -ios-安卓 获取元素时 配置参数的方法
iPhone_5S{ "automationName": "XCUITest", "platformName": "iOS&quo ...
- vue在使用ajax获取数据时,两种方法(jquery和vue_resource)
@{ Layout = null;} <!DOCTYPE html> <html><head> <meta name="viewport ...
- python 面向对象编程、获取对象信息
面向对象与面向过程 参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0 ...
- C#获取当前主机硬件信息
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
随机推荐
- 基于MRS-Hudi构建数据湖的典型应用场景介绍
摘要:华为云FunsionInsight MRS已集成Apache Hudi 0.8版本,基于MRS-Hudi构建数据湖解决方案. 本文分享自华为云社区<基于MRS-Hudi构建数据湖的典型应用 ...
- 治理效率提升77%!揭秘基于DataLeap实时健康分的最佳实践
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 背景 某企业实时数仓团队通过数据收集.整合.计算和存储构建实时数据仓库,为企业提供快速.准确.可靠的实时数据分析和 ...
- Axure 单键快捷键
如果怕误操作,可以把它关闭
- Python中节省内存的方法之一:__slots__属性
Python是一门动态语言,可以在运行过程中,修改实例的属性和增删方法.任何实例都包含一个字典__dict__,该字典保存了实例所有的属性和方法.Python也通过这个字典可以将任意属性绑定到实例上. ...
- 【论文笔记#2】Farseg++:用于高空间分辨率遥感图像地理空间对象分割的前景感知关系网络
论文来源 IEEE Transactions on Pattern Analysis and Machine Intelligence 作者 Zhuo Zheng; Yanfei Zhong; Jun ...
- 手把手教你搭建深度学习开发环境(Tensorflow)
前段时间在阿里云买了一台服务器,准备部署网站,近期想玩一些深度学习项目,正好拿来用.TensorFlow官网的安装仅提及Ubuntu,但我的ECS操作系统是 CentOS 7.6 64位,搭建Pyth ...
- Go--字符串函数
示例: package main import ( "fmt" "strings" ) func main() { //strings.Contains(): ...
- 【JAVA基础】加密算法
加密算法 MD5三次加密 package com.cy.store.service.impl; import com.cy.store.entity.User; import com.cy.store ...
- C 与 C++ 区别
C 与 C++ 区别 本文介绍 C 与 C++ 之间重要的或者容易忽略的区别.尽管 C++ 几乎是 C 的超集,C/C++ 代码混用一般也没什么问题,但是了解 C/C++ 间比较重要区别可以避免碰到一 ...
- #1010:Tempter of the Bone(DFS + 奇偶剪枝)
Problem Description The doggie found a bone in an ancient maze, which fascinated him a lot. However, ...