如何分析OOM文件

news2024/10/7 16:22:08

一、下载dump文件。
需联系运维同事获取dump文件。dump文件的生成,需在jvm启动时通过添加启动参数:-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=。因此直接到设置的目录文件下下载下来即可。后缀名一般为hprof。有些为dump后缀,改为hprof一样是可用的。

二、下载MAT工具。
本文分析oom文件需要借助MAT工具。MAT全名是Memory Analyzer,即分析JVM内存的工具。MAT实际是一个eclipse插件,在使用时还需下载eclipse.下载时可到这个地址下载:http://www.eclipse.org/mat/downloads.php,这里已经把MAT和eclipse都集成到一起了,所以很方便使用,推荐下载。

三、打开dump文件
打开eclipse后,直接将hprof文件拖到eclipse的工作区中。eclipse会自动打开这个文件,大约花费2到3分钟的时间,请耐心等待。打开后会看到下图所示的一个分析视图概览:饼状图显示的是内存中各对象的内存占比,最大的那块就是内存中占用空间最大的对象,把指标移到上面可以看出具体是哪个对象。但是因为我们自定义类大都使用包装类,比如String,Interger,故这里最大的对象,一般也是这些包装类,因此一般来说此图分析用途不大。
四、分析dump文件
1、找到上图Actions标签栏下的Dominator Tree
这个是我们本次分析的重点。dominator tree翻译是支配树,通过它能够找到对象之间的依赖关系。如下图所示。打开时就已经按照占用内存大小对对象进行了排序。排在最前面的就是占用内存最大的对象,这里实际就是上面饼状图的另一种表示。
在这里插入图片描述
2、找到org.apache.tomcat.util.threads.TaskThread
从过往分析的几个oom文件来看,TaskThread这个对象基本都是排前面几个的,因此比较好找。然后右键找到java Basics → Thread Details,如下图所示
在这里插入图片描述
3、查看TaskThread对象的线程栈
这里为啥找TaskThread对象,个人想法是,每个请求进来都是通过一个线程来进行处理的,故后续业务逻辑生成的对象多少会跟此对象有关联,因此可以把这个对象理解为业务处理的源头,通过分析它的线程栈,就可以找到出问题的方法。如下图所示,我们公司的代码都是com.to8to的前缀,根据这个应该很快就能找到我们要找的接口,这个接口就是产生大量对象的有问题的接口。接下来就需要结合具体业务进一步分析。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国际儿童节

节日由来 国际儿童节儿童作品画(11张) 国际儿童节的设立,和发生在二战期间一次屠杀——利迪策惨案有关。1942年6月10日,德国法西斯枪杀了捷克利迪策村16岁以上的男性公民140余人和全部婴儿,并把妇女和90名儿童押往集中营。村里的房舍、建筑物…

MySQL中字符串查询效率大比拼

背景 最近有个同事对字符串加索引,加完后,发现多了个奇奇怪怪的数字 执行的SQL如下: alter table string_index_test add index idx_name (name) USING BTREE;这个奇怪数字就是191,它很是疑惑,也没指定索引的长度 通…

SYSU程设c++(第十四周)函数模板、类模板

函数模板 在函数前加template<typename T1,typename T2,typename T3....>&#xff0c;T1,T2,T3叫模板形参 函数形参中的类型必须涵盖所有模板形参&#xff0c;不然报错 此时dv1,dv2只要相同类型就可以Swap (dv1, dv2); 但如果dv1,dv2不同类型就需要显示转换 Swap <dou…

五款电脑上的小众软件,简洁干净,功能强悍,值得收藏

电脑上的各类软件有很多&#xff0c;除了那些常见的大众化软件&#xff0c;还有很多不为人知的小众软件&#xff0c;专注于实用功能&#xff0c;简洁干净、功能强悍。 1.系统优化——Dism Dism是一款用于优化和维护Windows系统的工具。它可以让你对系统进行清理,备份,还原,更…

二叉树和堆详解

一、树的概念及结构 1.1树的概念 树是一种非线性的数据结构&#xff0c;它是由n(n≥0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 1.2树的相关基本概念 空集合也是树&#…

macOS Ventura 13.5beta2 (22G5038d)发布

系统介绍 黑果魏叔 6 月 1 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 13.5 开发者预览版 Beta 2 更新&#xff08;内部版本号&#xff1a;22G5038d&#xff09;&#xff0c;本次更新距离上次发布隔了 12 天。 macOS Ventura 带来了台前调度、连续互通相机、Fac…

数据结构--不带头的单向链表

不带头的单向链表 链表的结构注意点&#xff08;贯穿于整个链表的注意事项&#xff09;结点类型的定义申请新结点函数链表的打印链表的尾插链表的头插链表的尾删链表的头删链表的查找和修改在pos之前插入在pos位置删除在pos之后插入&#xff08;通过交换值&#xff0c;达到在po…

SpringBoot集成XXL-JOB

一、调度中心 首先下载XXL-JOB GitHub&#xff1a;https://github.com/xuxueli/xxl-job GitEE&#xff1a;https://gitee.com/xuxueli0323/xxl-job 项目使用2.3.1版本&#xff1a; https://github.com/xuxueli/xxl-job/releases/tag/2.3.1 使用IDEA打开项目 xxl-job-admin&…

Nginx网站服务详解(Nginx服务的主配置文件 ——nginx.conf)

目录 一、全局配置的六个模块简介 二、Nginx配置文件的详解 1&#xff09;全局配置模块 2&#xff09;I/O 事件配置 3&#xff09;HTTP 配置 4&#xff09;web服务监听设置 5&#xff09;其他设置 location常见配置指令&#xff1a;“root、alias、proxy_pass 对比&a…

【高危】Windows LDAP 服务远程代码执行漏洞

漏洞描述 LDAP (Lightweight Directory Access Protocol)是一个建立在TCP/IP协议栈上的目录访问协议&#xff0c;支持Active Directory服务的Windows服务器通常也支持LDAP协议。 Windows 10至11、Windows Server 2008至2022版本存在远程代码执行漏洞。当目标服务器开启LDAPS时…

PointNet、PointNet++代码解析

最远点采样FPS代码解析 注意&#xff1a;一般深度学习框架中都会使用批操作&#xff0c;来加速收敛。 因此采样函数的输入输出应当也要包含批。 def farthest_point_sample(xyz, npoint):"""Input:xyz: pointcloud data, [B, N, C]npoint: number of samplesR…

2023-6-1-Qt是什么

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f4a5;&#x1f4a5;&#x1f4a5;欢迎来到&#x1f91e;汤姆&#x1f91e;的csdn博文&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f49f;&#x1f49f;喜欢的朋友可以关注一下&#xf…

Python编程环境搭建:Mac OS安装Python环境

和 Linux 发行版类似&#xff0c;最新版的 Mac OS X 也会默认自带 Python 2.x。 我们可以在终端&#xff08;Terminal&#xff09;窗口中输入python命令来检测是否安装了 Python 开发环境&#xff0c;以及安装了哪个版本&#xff0c;如下所示&#xff1a; c.biancheng.net:~ m…

仙境传说ro服务端搭建服务器架设教程

仙境传说ro服务端搭建服务器架设教程 仙境传说&#xff1a;改编同名幻想漫画有代表科幻的中世纪的村庄、精灵居住的森林、烈日曝晒的沙漠、东洋科幻风格的村庄等。深受玩家的热爱&#xff0c;爱与勇气的冒险即将拉开帷幕这一次梦想由我们来守护仙境传说RO全屏大世界冒险RPG RO…

C++核心编程——初识STL——STL的基本概念和六大组件

文章目录&#x1f4ac; 一.前言二.STL基本概念和组成①容器②算法③迭代器④空间配置器⑤适配器⑥仿函数 三.STL工作机制 一.前言 长久以来&#xff0c;软件界一直希望建立一种可重复利用的东西&#xff0c;以及一种得以制造出“可重复运用的东西”的方法,让程序员的心血不止于…

Redis中的动态字符串(SDS)

动态字符串&#xff08;Simple Dynamic String&#xff0c;SDS&#xff09; Redis是用C语言编写的。Redis中的简单动态字符串的设计与实现&#xff0c;兼顾了操作高效、能保存任意数据、以及节省内存的需求。Redis并且还兼容C语言的原生字符串API&#xff0c;从而提高了代码的…

【MTGCD-Net】Detecting Building Changes with Off-Nadir Aerial Images

目录 1.背景 2.网络总体结构 2.1中间辅助任务预测 2.2多任务特征引导模块

【Android】Binder(二)内存划分和Binder实现一次拷贝

MMAP介绍 在 Android 中&#xff0c;Binder 通信机制中使用了 mmap&#xff08;Memory Map&#xff09;技术&#xff0c;用于实现进程间的共享内存。mmap 是一种内存映射文件的方式&#xff0c;可以将一个文件或者设备映射到进程地址空间的一段连续的地址区域中&#xff0c;这…

运维小白必学篇之基础篇第三集:文件管理相关命令实验

文件管理相关命令实验 实验者&#xff1a;胡 阳 上午练习题&#xff1a; 1、创建1.txt文件&#xff0c;文件大小为350m 2、使用echo为文件2.txt写入内容hello&#xff0c;world 3、查看文件2.txt文件的内容 4、为2.txt文件追加写入nihao 5、实时查看2.txt的变化&#xff0c;可…

低代码平台:高效构建供应商信息管理系统的利器

随着数字化时代的来临&#xff0c;企业对于应用系统的需求也越来越高&#xff0c;但同时传统的软件开发方式有很多弊端&#xff0c;比如需要大量的开发人员、开发周期长、维护成本高等&#xff0c;这就导致了低代码平台的兴起。低代码平台是一种适用于企业快速构建应用程序的工…