使用MAT定位线上OOM问题

目录

1.什么是OOM?

2.发生的可能原因

3.常见类型的OOM

4.如何定位问题?

4.1 获取dump文件

4.2 MAT分析

「Leak Suspects」泄露嫌疑

「Histogram」直方图

「dominator tree」支配树

「thread overview」线程视图


目录

1.什么是OOM?

2.发生的可能原因

3.OOM类型

4.如何定位问题?

4.1 获取dump文件

4.2 MAT分析


1.什么是OOM?

OOM,全称“Out Of Memory”,就是“内存用完了”。当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个error

2.发生的可能原因

  • 内存溢出:一次性申请的太多对象
  • 内存泄露:对象使用完一直未释放的,导致虚拟机不能再次使用该内存,此时这段内存就泄露了,因为申请者不用了,而又不能被虚拟机分配给别人用。
  • 本身资源不够(jmap -heap查看堆信息)分配的内存太小

3.常见类型的OOM

常见的有以下两种:

  • java.lang.OutOfMemoryError: Java heap space ------>java堆内存溢出
  • java.lang.OutOfMemoryError: PermGen space ------>java永久代溢出

4.如何定位问题?

4.1 获取dump文件

  • 系统已经OOM挂了

    运行参数提前设置:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/export/Logs/project.hprof
  • 系统运行中还未OOM

   执行以下命令导出dump文件:

> jps
> jmap -dump:format=b,file=project.hprof ${pid}

4.2 MAT分析

「Leak Suspects」泄露嫌疑

「Histogram」直方图

    显示了各个类的内存占用情况,按照对象的数量或大小进行排序。可以在 Window - Preferences 菜单中设置单位

  • Shallow heap:指的是对象自身所占据的内存,不包含对其他对象的引用,也就是对象头加成员变量(不是成员变量的值)的总和。

  • Retained heap:指的是该对象GC之后所能回收的总和,包括对象自身所占据的内存,加上仅能够通过该对象引用到的其他对象所占据的内存。

把内存中的对象看成下图中的节点,并且对象和对象之间互相引用。这里有一个特殊的节点GC Roots,这就是reference chain的起点

 

从obj1入手,上图中蓝色节点代表仅仅只有通过obj1才能直接或间接访问的对象。因为可以通过GC Roots访问,所以左图的obj3不是蓝色节点;而在右图却是蓝色,因为它已经被包含在retained集合内。所以对于左图,obj1的retained size是obj1、obj2、obj4的shallow size总和;右图的retained size是obj1、obj2、obj3、obj4的shallow size总和。obj2的retained size可以通过相同的方式计算 

对象引用关系

  • with incoming references 表示的是当前查看的对象,被外部应用
  • with outGoing references 表示的是当前对象,引用了外部对象
「dominator tree」支配树

   在此视图中列出了每个对象(Object Instance)与其引用关系的树状结构,同时包含了占用内存的大小和百分比。

「thread overview」线程视图

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/724561.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

完整迁移方案+工具:Citrix替换,无感迁移!

随着用户的替换进程进入到演进的阶段,用户面临的重大挑战包括: (1)大量数据的迁移需要精确规划,以避免数据丢失或损坏; (2)迁移效率低下,不仅会增加迁移成本,…

每日复盘-202406019

今日关注: 20240619 六日涨幅最大: ------1--------300868--------- 杰美特 五日涨幅最大: ------1--------300462--------- 华铭智能 四日涨幅最大: ------1--------300462--------- 华铭智能 三日涨幅最大: ------1--------300462--------- 华铭智能 二日涨幅最大…

可信计算和数字水印技术

可信计算 可信计算可信计算基础概述可信计算关键技术要素可信性认证可信计算优劣 数字水印技术数字版权保护技术 可信计算 可信计算基础概述 可信计算(Trusted Computing,TC):在计算和网络通信系统中广泛使用的、基于硬件安全模块…

[Linux] 文件/目录命令

pwd print working directory cd change directory cd #返回主目录 cd ..返回上级目录 cd . 不动 cd ~ 用户名 进入某用户的主目录 mkdir mkdir 目录名 mkdir -p xx/yy/zz #一次创建多重目录 rmdir remove directory 删除空目录,只能删除空目录,别的不能…

docker pull xxx拉取超时time out

文章目录 前言总结 前言 换了镜像源,改配置的都不行,弄了一个下午,最后运行一下最高指令就可以了 sudo docker_OPTS"--dns 8.8.8.8"总结 作者:加辣椒了吗? 简介:憨批大学生一枚,喜欢…

停止 Windows 更新

首先按住 win r,输入 regedit: 点击确认,进入注册表页面: 依次点击右侧:HKEY_LOCAL_MACHINE -> SOFTWARE -> Microsoft -> WindowsUpdate -> UX -> Settings: 进入编辑器后,右键…

LeetCode-day17-2713. 矩阵中严格递增的单元格数

LeetCode-day17-2713. 矩阵中严格递增的单元格数 题目描述示例示例1:示例2:示例3: 思路代码 题目描述 给你一个下标从 1 开始、大小为 m x n 的整数矩阵 mat,你可以选择任一单元格作为 起始单元格 。 从起始单元格出发&#xff…

D111FCE01LC2NB70带流量调节派克比例阀

D111FCE01LC2NB70带流量调节派克比例阀 派克比例阀:由于采用(秉圣135陈工6653询3053)电液混合控制技术,响应速度更快、精度更高、控制更平稳。同时,由于采用高质量的材料制造,具有较高的承压能力和抗磨损性…

示例:推荐一个应用Adorner做的消息对话框

一、目的:开发过程中,经常用到对话框,下面演示一个应用Adorner做的带遮盖层蒙版的控件,使用MainWindow的Adorner实现不需要额外定义遮盖层,使用Object作为参数,可自定义DataTemplate定制消息显示样式 二、效…

react使用OpenLayers实现类似船某网在地图放大时展示具体船舶符号缩小时显示聚合小点效果

一、效果 如图所示,地图缩小(即比例尺放大)时,显示聚合小绿点; 地图放大(比例尺缩小)时,展示具体船舶符号: 二、思路 1)设置2个图层,一个展示…

尚品汇项目2

p68 加入产品个数操作 p69 加入购物车

GitHub爆赞!最适合新手入门的教程——笨方法学Python 3

“Python 是一门既容易上手又强大的编程语言。”这句话本身并无大碍,但需要注意的是,正因为它既好学又好用,所以很多 Python 程序员只用到了其强大功能的一小部分。 今天给小伙伴们分享的这份手册以习题的方式引导读者一步一步学习编程&…

【最有效】解决anaconda的虚拟环境重复目录问题

安装某些原因导致虚拟环境出现重复的问题,有的博客介绍删除“C:\Users\Success\.conda”中的environments.txt,但是自己尝试了对本计算机不管用,甚至把整个.conda文件删除问题依旧。 现在介绍一下最简单管用的办法: 打开“C:\Us…

鸿蒙HarmonyOS实战:状态管理和传值

状态管理 State State是一个装饰器,是用来存放数据的,比较好理解 由State的数据来进行状态驱动视图更新 代码很简单 State count: number 0; 需要注意的是State初始化的数据必须赋值 这里我们讨论简单用法,至于复杂的用法可以到项目中介绍…

Certificate数字证书的有效性验证

1.证书相关概念 在讲证书有效性验证的逻辑之前,先了解几个概念。 证书颁发机构:一般为运营数字证书的机构,该机构负责证书的签发、吊销等生命周期管理。证书链:证书颁发机构一般会由多个组成,为树状层级,第…

嵌入式开发十八:USART串口通信实验

上一节我们学习了串口通信的基本理论,串口通信是学习单片机的一个重要的一步,非常重要,这一节我们通过实验来学习串口通信的使用,以及串口的接收中断的使用。 一、发送单个字节uint8_t数据或者字符型数据 实现的功能:…

conda下安装32位版本python

前言:当前主流的系统为64bit系统,conda软件为64bit软件,因此使用conda创建虚拟环境安装python时默认安装的python为64bit版本,但部分研发场景需要调用32bit依赖,只能使用32bit的python,因此需要安装32bit的…

KVB投资安全小知识:如何识别一个货币是避险货币还是风险货币?

摘要 在全球经济不断变化的今天,理解货币的避险属性和风险特征对投资者至关重要。本文将详细探讨如何准确识别一个货币是避险货币还是风险货币,并结合具体的货币案例分析它们的本质差异。通过深入分析不同因素对货币走势的影响,帮助读者在金…