Memory Analyzer Mat

news/2024/4/22 21:27:05/

目录

一、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.ppmy.cn/news/47174.html

相关文章

字典树p8036

Description 给定 &#xfffd;n 个模式串 &#xfffd;1,&#xfffd;2,…,&#xfffd;&#xfffd;s1​,s2​,…,sn​ 和 &#xfffd;q 次询问&#xff0c;每次询问给定一个文本串 &#xfffd;&#xfffd;ti​&#xff0c;请回答 &#xfffd;1∼&#xfffd;&#xfff…

NetSuite GPT的辅助编程实践

作为GPT综合症的一种表现&#xff0c;我们今朝来探究下GPT会不会抢了我们SuiteScript的编程饭碗&#xff0c;以及如何与之相处。以下内容来自我个人的实践总结。 我们假设一个功能场景&#xff1a; 为了让用户能够在报价单上实现“一键多行”功能&#xff0c;也就是在报价中可…

learn_C_deep_1 (C程序补充知识、变量的声明和定义、声明和定义的区别)

目录 C程序补充知识 变量的声明和定义 1.什么是变量&#xff1f; 2.变量的本质是什么&#xff1f; - 所有的变量都要在内存的某个位置开辟空间 3.变量的定义和声明形式、初始化和赋值的区别 4.为什么要定义变量 声明和定义的区别 C程序补充知识 先让我们来看一段C语言…

.net学习教程大纲

以下是一个 .NET 学习指南大纲&#xff0c;供您参考&#xff1a; 一、C# 编程语言 语言基础知识 数据类型、变量、常量 运算符、表达式 流程控制语句 数组、集合和泛型 类、对象、封装、继承和多态 接口和委托 异常处理 LINQ 面向对象设计原则 二、.NET 框架 .NET…

激活函数(Activation Function)及十大常见激活函数

目录 1 激活函数的概念和作用 1.1 激活函数的概念 1.2 激活函数的作用 1.3 通俗地理解一下激活函数&#xff08;图文结合&#xff09; 1.3.1 无激活函数的神经网络 1.3.2 带激活函数的神经网络 2 神经网络梯度消失与梯度爆炸 2.1 简介梯度消失与梯度爆炸 2.2 梯度不稳…

2021遥感应用组二等奖:基于机器学习回归算法的鄱阳湖水质遥感定量反演及时序变化监测研究

作品介绍 一、作品背景 鄱阳湖是中国第一大淡水湖&#xff0c;也是中国第二大湖&#xff0c;它在调节长江水位、涵养水源、改善当地气候等方面起着重大的作用。但近年来受围垦、环境污染等人类活动影响&#xff0c;鄱阳湖湿地退化严重&#xff0c;同时使鄱阳湖的容量减少&…

新能源汽车的充电、电池包的组成、充电的设备

一、新能源汽车的电池包 1、电动汽车电池包的组成 电动汽车的电池包主要由电池单体、模组构成。 电池单体指的是单个独立的锂电池&#xff0c;将多个电池单体组合在一起就成了模组&#xff0c;再把多个模组组合起来最终构成电池包。 不过这里有个特例&#xff0c;那就是比亚…

java面向对象

一、面向对象和面向过程 1、面向对象思想和面向过程思想 面向过程 关注的焦点是过程&#xff1a;过程就是操作数据的步骤。如果某个过程的实现代码重复出现&#xff0c;那么就可以把这个过程抽取为一个函数。这样就可以大大简化冗余代码&#xff0c;便于维护。 典型的语言&a…

从零开始学架构——高性能负载均衡

高性能负载均衡 单服务器无论如何优化&#xff0c;无论采用多好的硬件&#xff0c;总会有一个性能天花板&#xff0c;当单服务器的性能无法满足业务需求时&#xff0c;就需要设计高性能集群来提升系统整体的处理性能。高性能集群的本质很简单——通过增加更多的服务器来提升系…

webp怎么转换成png,4个方法教你快速处理

webp怎么转换成png&#xff1f;目前在一些比较大的图片素材网站下载的图片都是webp格式的。我们都知道webp格式图片&#xff0c;它在正常的图片浏览器中是无法打开的。 所以说我们要把webp图片转变成png格式&#xff0c;正常来说我们常用的图片处理软件也能进行格式转换&#x…

SAS学习第5章:方差分析之大纲及单因素试验

t检验能用来进行两个处理平均数之间的假设检验&#xff0c;但一般研究会出现多个处理优劣的比较&#xff0c;即需要进行多个处理平均数的假设检验&#xff0c;此时t检验不再适用&#xff0c;具体表现在检验量增加&#xff0c;如k个处理&#xff0c;要进行k*(k-1)/2次检验&#…

第17章_反射机制

第17章_反射机制 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 本章专题与脉络 1. 反射(Reflection)的概念 1.1 反射的出现背景 Java程序中&#xff0c;所有的对象都有两种类型&#xff1a;编…

Java包装类

包装类 1.Java中的数据类型int、double等不是对象&#xff0c;无法通过向上转型获取到Object提供的方法&#xff0c; 而像String却可以&#xff0c;只因为String是一个对象而不是一个类型 2.基本数据类型由于这样的特性&#xff0c;导致无法参与转型、泛型、反射等过程 3.为了…

深入剖析 Qt QHash :原理、应用与技巧

目录标题 引言QHash 基础用法基础用法示例基础用法综合示例 QHash 的高级用法迭代器&#xff1a;遍历 QHash 中的元素&#xff08;Iterators: Traversing Elements in QHash &#xff09;QHash和其他容器的对比QHash 和 std::unordered\_map QHash的底层原理和内存管理QHash 的…

自动化测试用什么框架?Pytest框架 vs Unittest框架,企业使用分析......

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 安装方式不同 un…

Python中的异常——概述和基本语法

Python中的异常——概述和基本语法 摘要&#xff1a;Python中的异常是指在程序运行时发生的错误情况&#xff0c;包括但不限于除数为0、访问未定义变量、数据类型错误等。异常处理机制是Python提供的一种解决这些错误的方法&#xff0c;我们可以使用try/except语句来捕获异常并…

Pytorch深度学习笔记(五)反向传播算法

推荐课程&#xff1a;04.反向传播_哔哩哔哩_bilibili 1.为什么要使用反向传播算法 简单模型可以使用解析式更新w 复杂模型&#xff0c;如图&#xff0c;输入矩阵为5*1矩阵&#xff0c;等一层权重矩阵H1为6*5矩阵&#xff0c;则需要30个解析式&#xff0c;第二层权重矩阵H2为6…

day19_Set

今日内容 零、 复习昨日 一、作业 二、Set 三、HashSet[重点] 四、LinkedHashSet 五、TreeSet[难点,熟悉] 六、Collections 零、 复习昨日 一、作业 见代码 二、Set Set是Collection集合的子接口,主要特性是不允许重复元素 Set接口中的操作集合的API与Collection中一模一样 Set…

用EasyX图形库画一个哆啦A梦

继续说图形库&#xff0c;加一点实战用图形画图&#xff08;用来巩固代码&#xff09;&#xff1a; rectangle这个函数 四个参数&#xff0c;左上角坐标的x,y值&#xff0c;右下角坐标的x,y值&#xff1b;因为只要有两个点&#xff0c;就可以以它们的横坐标之差为长&#xff…

JavaWeb之谈论项目编码规范_Java版

1. 关于DDD项目结构约定 1.1 项目结构使用DDD整洁架构进行分包 maven项目结构遵从DDD整洁架构分为如下四个顶级包&#xff1a; application - 应用层代码&#xff0c;一般为接口层定义API的实现类和一些结构转化&#xff0c;application不应该承载业务逻辑 domain - 领域层&a…