通过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 ...
随机推荐
- 毕业季 | 程序员初入职场必备软件开发神器,华为云Astro带你开启新篇章
摘要:5分钟写出应用,10分钟开发大屏,新手程序员必学技能之华为云Astro,快来get. 本文分享自华为云社区<毕业季 | 程序员初入职场必备软件开发神器,华为云Astro带你开启新篇章> ...
- 云原生2.0时代下,DevOps实践如何才能更加高效敏捷?
当前全球的数字化浪潮逐步加深,云计算成为当今信息化发展的重要基础设施,云原生(Cloud Native)在数字化浪潮中的角色逐步提升,成为近几年云计算领域炙手可热的话题. 首先我们来看看一张图,看看云 ...
- web内容如何保护:如何有效地保护 HTML5 格式的视频内容?
文章资料还没有整理完,现在还不通顺,但是可以做笔记看 HTML是用于创建web页面和web应用程序的公开标准的标记语言.HTML文件基本上是纯文本文件,这意味着软件应用程序和普通人可以轻松地创建.读取 ...
- A/B测试有哪些常见应用场景?——火山引擎DataTester科普
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 火山引擎 DataTester不仅对外提供服务,也是字节跳动内部所应用的A/B实验平台,它基于先进的底层算法, ...
- 转换 nvarchar 值 '81000000825' 时溢出了整数列
转换 nvarchar 值 '81000000825' 时溢出了整数列
- SqlServer 服务无法启动 操作系统错误: 5(拒绝访问。)
FCB::Open failed: 无法打开文件号 2 的文件 D:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA ...
- Docker 安装 ELK,EFK代替
ELK 版本因为 前面 Elasticsearch 用的 7.9.3 版本,所以 kibana-7.9.3.logstash-7.9.3 都用 7.9.3 版本 安装配置 Elasticsearch ...
- 浅谈locust 性能压测使用
1. 基本介绍 Locust是一个开源的负载测试工具,用于模拟大量用户并发访问一个系统或服务,以评估其性能和稳定性.编写语言为Python,可通过Python来自定义构建性能压测场景脚本.Locust ...
- 【Qt Libraries】QUrl 的基本使用方法
参考博客: https://www.cnblogs.com/liushui-sky/p/10892097.html https://www.cnblogs.com/ShineLeBlog/p/1495 ...
- SpringBoot 学习笔记:运维篇
SpringBoot程序的打包和运行 开发部门使用Git.SVN等版本控制工具上传工程到版本服务器 服务器使用版本控制工具下载工程 服务器上使用Maven工具在当前真机环境下重新构建项目 启动服务 程 ...