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

通过,mat,获取,oom,对象,信息,方法,过程 · 浏览次数 : 208

小编点评

**时间总结** 1. 下载 2h,下载速度提高到 5MB/s左右。 2. 客户现场因为磁盘限制,没有进行压缩。 3. 百度会员加持下的百度云盘大于 2个小时下载完 (3600*5M*2) 4。 4. mat 分析 40min。 5. 简单处理,分析完之后第一个界面一般是 overview 的界面在 biggest Objects By retained size 界面内左键单击最大的内存区域。 6. 尝试分析其他文件,发现对象信息没有具体的数据,但可以根据 ID 查询到具体文件。

正文

通过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时对象信息的方法与过程相似的内容:

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

通过mat获取OOM时对象信息的方法与过程 背景 如果谁的耐心不好, 就让他去看MAT里的objects信息. 有项目出现了OOM的情况 我在公司这边有一台内存比较高的Win10机器. 然后帮助同事进行了dump文件的分析. 为了备忘, 这里简单总结一下. 时间总结 公司网络限速. 总结为: 下载2

[转帖]Eclipse MAT 内存分析工具

Exlipse MAT 是一款强大的 Java 堆内存分析工具,我们可以通过该工具实现对 Java 堆内存的分析。 官网。实现查找内存泄漏以及查看内存消耗的情况。 MAT 使用 首先去官网下载对应的软件压缩包,下载地址。MAT 提供了多种平台的软件包支持,包括 Windows , Mac OSX ,

金仓数据库全攻略:简化部署,优化管理的全流程指南

通过本篇文章的学习和实践,我们深入了解了如何利用Docker技术快速部署KingbaseES数据库。从下载镜像到编写Docker Compose模板,再到容器的启动和管理,每一步都体现了现代化部署方式的便捷和高效。此外,我们还掌握了KSQL命令行工具的使用,这将极大地提升开发人员与数据库交互的效率。

SVG 标签的用法和应用场景

通过使用 标签,可以在 SVG 图像内部定义可重复使用的任意图案。这些图案可以通过 fill 属性或 stroke 属性进行引用。 使用场景 例如我们要在 中绘制大量的圆点点,可以通过重复使用 标签来实现。

5分钟带你了解RabbitMQ的(普通/镜像)集群

通过本文我们深入了解了RabbitMQ的集群模式及其优缺点。无论是普通集群还是镜像集群,都有其适用的场景和局限性。普通集群利用Erlang语言的集群能力,但消息可靠性和高可用性方面存在一定挑战;而镜像集群通过主动消息同步提高了消息的可靠性和高可用性,但可能会占用大量网络带宽。因此,在选择集群方案时,...

腾讯云 BI 数据分析与可视化的快速入门指南

通过本文的介绍,我们了解了腾讯云 BI 这款商业智能解决方案的基本功能和应用场景。从创建项目、连接数据源、数据表建模到页面搭建和推送功能的设置,我们通过一个互联网运营看板的案例,展示了如何快速入门并利用腾讯云 BI 进行数据分析和可视化。通过简单的数据编辑,我们可以轻松地设计报表,并实现数据的可视化...

赛博斗地主——使用大语言模型扮演Agent智能体玩牌类游戏。

通过大模型来实现多个智能体进行游戏对局这个想对已经比较成熟了无论是去年惊艳的斯坦福小镇还是比如metaGPT或者类似的框架都是使用智能体技术让大模型来操控,从而让大模型跳出自身“预测下一个token”的文字功能去探索更多的应用落地可能性。不过一直没有真正操作过,直到前段时间看到一个新闻《和GPT-4

基于腾讯元器搭建前端小助手

通过本文,我们了解了如何利用腾讯元器搭建一个前端助手智能体。通过使用插件和观察其使用效果,我们可以发现前端助手在解决问题和提供帮助方面的潜力。这个前端助手可以成为我们在前端开发过程中的得力助手,帮助我们提高工作效率和解决难题。随着智能技术的不断进步,我们可以期待前端助手在未来发展中的更多功能和应用。

通过钩子函数+Traceid实现Flask链路追踪

背景 在flask web中我们通常需要一个traceid作为调用参数传递给全链路各个调用函数 需要针对一次请求创建一个唯一的traceid:这里用uuid去简化代替 我们需要保证traceid不被污染,在每个请求期间存在,在请求结束销毁且线程独立:这里通过flask中的g对象来存储线程内的数据 由

AI实战 | 使用元器打造浪漫仪式小管家

通过本次的浪漫仪式小管家的打造,我深刻体会到了智能体在情感表达和仪式感营造方面的潜力和重要性。从挑选礼物到写情诗,再到制作独特的专属短视频和发送心意,每一个步骤都是为了让浪漮更加丰富和令人难忘。