Memory Analyzer Mat

news2024/9/30 9:20:49

目录

一、JDK 、JRE和JVM 的关系

二、Java进程内存占用查询命令

2.1JAVA 代码是如何执行的

2.2何时用hrpof文件分析内存

三、Memory Analyzer Mat

3.1Memory Analyzer Mat安装

3.2 Overview视图

3.2.1直方图视图(histogram)

3.2.2 Dominator Tree

3.2.3 Top Consumers

3.3 Leak Suspects

3.3.1 Overview

3.3.2 Problem Suspect

3.3.3 Problem Suspect 1

3.3.4 Problem Suspect 2


一、JDK 、JRE和JVM 的关系



二、Java进程内存占用查询命令


2.1JAVA 代码是如何执行的

2.2何时用hrpof文件分析内存

其实如果只是要了解JVM的运行状况,然后去进行JVM GC优化,通常来说jstat就完全够用了。但是有的时候可能我们会发现JVM新增对象的速度很快,然后就想要去看看,到底什么对象占据了那么多的内存。

如果发现有的对象在代码中可以优化一下创建的时机,避免那种对象对内存占用过大,那么也许可以去反过来优化一下代码。当然,其实如果不是出现OOM那种极端情况,也并没有那么大的必要去着急优化代码。

我们通过如下可以 大致连接JVM 内存的状态,老年代和新生代使用情况。

jmap -heap 11469
jstat -gc 11469  5000

但是如果你仅仅只是看一个大概,感觉就只是看看上述那些对象占用内存的情况,感觉还不够,想要来点深入而且仔细点的那就可以用jmap命令生成一个堆内存快照放到一个文件里去,用如下的命令即可:

jmap -dump:live,format=b,file=dump.hprof PID

这个命令会在当前目录下生成一个dump.hrpof文件,这里是二进制的格式,你不能直接打开看的,其把这一时刻JVM堆内存里所有对象的快照放到文件里去了,供你后续去分析。


三、Memory Analyzer Mat


3.1Memory Analyzer Mat安装

Memory Analyzer Mat下载地址:Eclipse Memory Analyzer Open Source Project | The Eclipse Foundation

关于 HeapDumpOnOutOfMemoryError 参数讲解:

-XX:+HeapDumpOnOutOfMemoryError 参数表示当JVM发生OOM时,自动生成DUMP文件。
-XX:HeapDumpPath=${目录}参数表示生成DUMP文件的路径,也可以指定文件名称,例如:-XX:HeapDumpPath=${目录}/java_heapdump.hprof。如果不指定文件名,默认会在项目根目录下生成一个文件,文件名格式为:java_<pid>_<date>_<time>_heapDump.hprof。
-XX:+HeapDumpBeforeFullGC		当 JVM 执行 FullGC前
-XX:+HeapDumpAfterFullGC		当 JVM 执行 FullGC后

因为程序存在OOM 问题所以我主动 dump

## 7150 进程号
jmap -dump:live,format=b,file=/hadoop/ops/ftpDS.hprof  7150

可以看到 生成的 hprof 的文件还是比较大的 达到了 1.6G。

3.2 Overview视图

将dump下来的hprof文件打开,视图首页总结出当前这个Heap dump占用了多大的内存,其中涉及的类有多少,对象有多少,类加载器,如果有没有回收的对象,会有一个连接,可以直接参看(图中的Unreachable Objects Histogram)。 比如该例子中显示了Size: 979 MB Classes: 4.2k Objects: 26.1m Class Loader: 46

3.2.1直方图视图(histogram)

histogram视图主要是查看某个类的实例个数,比如我们在检查内存泄漏时候,要判断是否频繁创建了对象,就可以来看对象的个数来看。也可以通过排序看出占用内存大的对象。

3.2.2 Dominator Tree

列举出Retained Size值最大的几个值,你可以将鼠标放到饼图中的扇叶上,可以在右侧看出详细信息:

3.2.3 Top Consumers

1.Biggest Objects (Overview)

2 Biggest Objects

3 Biggest Top-Level Dominator Classes (Overview)

4 Biggest Top-Level Dominator Classes

5 Biggest Top-Level Dominator Class Loaders (Overview)

6 Biggest Top-Level Dominator Packages

3.3 Leak Suspects

3.3.1 Overview

3.3.2 Problem Suspect

这个视图会展示一些可能的内存泄漏的点,比如上图上图显示有2个内存泄漏可疑点。

3.3.3 Problem Suspect 1

"org.apache.hadoop.fs.FileSystem$Cache"”的一个实例文件系统被"sun.misc.Launcher$AppClassLoader @ 0xc04e9290"加载。占用208,987,664字节(20.36%)。内存在“"org.apache.hadoop.fs.FileSystem$Cache"”的一个实例中累积。文件系统被程序"sun.misc.Launcher$AppClassLoader @ 0xc04e9290"加载。

关键字

org.apache.hadoop.fs.FileSystem缓存

3.3.4 Problem Suspect 2

7,670个“org.apache.hadoop.conf.Configuration”实例。配置”,由“sun.misc”加载。"sun.misc.Launcher$AppClassLoader @ 0xc04e9290" 占用813,527,552字节(79.25%)。这些实例是从"java.util.HashMap$Node[]",的一个实例中引用的。由"<系统类加载器>"加载。

看到上述的信息,我们基本能找到在我们代码中造成内存泄漏可疑点的地方,很容易去定位问题。

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

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

相关文章

计算机图形学 Animation 学习笔记

1、做插值&#xff1a; 线性插值和用贝塞尔曲线做插值&#xff0c;贝塞尔曲线做插值可以看起来更生动形象 2、物理模拟&#xff08;Simulate Physics&#xff09; 原理是利用“ 力 质量 x 加速度”&#xff0c;知道了这些信息&#xff0c;那么下一帧的位置就可以提前被运算出来…

Ethercat学习-从站FOE固件更新(TwinCAT主站)

文章目录简介协议说明1.读请求2.写请求3.数据4.应答5.错误码6.忙数据传输流程1.读流程2.写流程3.忙操作代码实现1.源码生成与移植2.代码解析1.FOE_ServiceInd2.FOE_Read3.FOE_Write4.FOE_Ack5.FOE_Data6.FOE_Error7.FOE_Busy其他TwinCAT测试简介 FOE(File Access over Etherca…

React从入门到入土系列3-使用React构建你的应用

这是我自己系统整理的React系列博客&#xff0c;主要参考2023年3月开放的最新版本react官网内容&#xff0c;欢迎你阅读本系列内容&#xff0c;希望能有所收货。 本文是该系列的第3篇文章&#xff0c;阅读完本文后你将收获&#xff1a; 如何使用React逐步构建你的应用了解prop…

《分布式商业》

读完《分布式商业&#xff1a;数字化时代的新商业变革》&#xff0c;说实话&#xff0c;如果读者没有技术研发背景&#xff0c;读完此书&#xff0c;是很难在技术和商业层面引起共鸣。我甚至觉得&#xff0c;这本书就是写给技术类岗位的同学看的&#xff1b;而写这本书的人&…

Softing工业边缘产品的新功能助力工业数据集成到IT解决方案中

Softing的edgeConnector和edgeAggregator产品在3.40版本中新增了一系列功能&#xff0c;使数据集成到IT解决方案变得更加容易。 基于Docker的edgeConnector产品系列支持访问SIMATIC S7、SINUMERIK 840D和Modbus TCP等控制器中的过程数据。同样基于Docker的edgeAggregator产品可…

柔性数组【结构体和动态内存的结合】

全文目录前言柔性数组的定义语法柔性数组的特点柔性数组的使用柔性数组的优势前言 很多人可能没有听过柔性数组这个概念&#xff0c;但是在C99中柔性数组是确实存在的。我个人感觉有点像动态内存和结构体的结合。 柔性数组的定义语法 结构中的最后一个元素允许是未知大小的数…

一起学 WebGL:绘制三角形

大家好&#xff0c;我是前端西瓜哥。画了好几节课的点&#xff0c;这次我们来画三角形了。 三角形可太重要了&#xff0c;再复杂的三维模型都是由一个个小三角形组合而成&#xff0c;越多越精细越真实。 绘制三角形 这次绘制三角形&#xff0c;要绘制的点就有三个了&#xf…

C语言之 单链表1(simply linked list)

单链表 链表优点&#xff1a; 1.按需申请空间&#xff0c;需要就申请&#xff0c;不需要就释放 2.头部或中间插入数据&#xff0c;不需要挪动数据 3.不存在空间浪费 缺点&#xff1a; 1.每次存放一个数据&#xff0c;到要存一个指针去链接后面的数据节点 2.不支持随机访问&a…

让你的ChatGPT更加强大——200+小白用来解锁ChatGPT高级功能的提示(Prompts)

让你的ChatGPT更加强大——200小白用来解锁ChatGPT高级功能的提示&#xff08;Prompts&#xff09;使用说明标签筛选关键词搜索展示区复制语言切换常见问题为什么提示词用英文&#xff1f;中文搜索出错输出虚假信息提示词不好用为什么执着于 ChatGPT&#xff1f;最后参考博客其…

Vue.js 2.0 单文件组件

Vue.js 2.0 单文件组件介绍 在很多Vue项目中&#xff0c;我们使用 Vue.component 来定义全局组件&#xff0c;紧接着用 new Vue({ el: #container }) 在每个页面内指定一个容器元素。 这种方案在只是使用 JavaScript 增强某个视图的中小型项目中表现得很好。然而在更复杂的项…

对象树、QT的坐标系、信号和槽机制

目录 1、QT中什么是对象树 2、QT的坐标系 3、信号和槽机制 3.1、信号槽的理解 3.2、信号槽的工作原理 3.3、信号槽的使用 3.3.1、系统的信号和槽 3.3.2、自定义信号和槽函数 3.3.3、信号和槽函数之间的参数传递 3.3.4、信号和槽的注意 1、QT中什么是对象树 在创建 QO…

重构·改善既有代码的设计.04之重构手法(下)完结

1. 前言 本文是代码重构系列的最后一篇啦。前面三篇《重构改善既有代码的设计.01之入门基础》、《重构改善既有代码的设计.02之代码的“坏味道”》、《重构改善既有代码的设计.03之重构手法&#xff08;上&#xff09;》介绍了基础入门&#xff0c;代码异味&#xff0c;还有部…

如何在ubuntu上搭建minio

由于腾讯的对象存储服务器&#xff08;COS&#xff09;的半年免费试用期已过&#xff0c;所以寻思鼓捣一下minio&#xff0c;试着在自己的服务器上搭建一套开源的minio对象存储系统。 单机部署基本上有以下两种方式。 一、直接安装 最基础的一种单机安装&#xff0c;这里不做…

记录-js基础练习题

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 隔行换色(%): window.onload function() {var aLi document.getElementsByTagName(li);for(var i 0; i < aLi.length; i){if(i%2 1){aLi[i].style.background #bfa;}} } <ul><li>…

微搭低代码学习之基础操作

低代码开发平台&#xff0c;是一种方便产生应用程序的平台软件&#xff0c;软件会开发环境让用户以图形化接口以及配置编写程序&#xff0c;而不是用传统的程序设计作法。此平台可能是针对 某些种类的应用而设计开发的&#xff0c;例如数据库、业务过程、以及用户界面。这类平台…

STM32锁芯片,解锁方法(J-LINK)

在烧写STM32时&#xff0c;不小心把usb口给弄掉了&#xff0c;然后就尴尬了&#xff0c;芯片被锁了。 烧写的时候报错&#xff0c;如下&#xff1a; 然后就搜了一下&#xff0c;大致有两个方法&#xff0c; 第一种需要通过接3.3V到板子上BOOT0重新上电第二种是直接通过软件…

Golang语言Windows环境搭建(Visual Studio Code)

一、Golang语言简介 二、Windows环境搭建 1、软件下载 Golang语言安装包官网下载地址&#xff1a;https://golang.google.cn/dl/ Visual Studio Code编辑器下载&#xff1a;https://code.visualstudio.com/ 2、Golang安装及环境变量配置 2.1 Golang语言安装包 双击安装…

可配置物料-文章资料分享

可配置物料项目一般很少用到&#xff0c;用到就是要命&#xff0c;推荐一下之前查资料收集的资料&#xff0c;分享给大家。感谢这位大佬收集的文章&#xff01; Variant Configuration (LO-VC) - Product Lifecycle Management - Support Wikihttps://archive.sap.com/document…

5V的LDO电源的WCCA分析-可靠性分析计算过程

WCCA(WorstCase Circuit Analysis)分析方法是一种电路可靠性分析设计技术&#xff0c;用来评估电路中各个器件同时发生变化时的性能&#xff0c;用于保证设计电路在整个生命周期的都可以可靠工作。通过WCCA分析&#xff0c;验证在上述参数在其容差范围内发生变化时&#xff0c;…

C++模板基础(八)

数值模板参数与模板模板参数 ● 模板可以接收&#xff08;编译期常量&#xff09;数值作为模板参数 – template class Str; template<int a> int fun(int x) {return x a; }int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);std::cout << fun…