Dump文件分析工具 - MAT图文解析

article/2025/8/31 16:15:46

/ 前言 /

在讲解Mat工具之前我们先来看下几个关于Dump/文件的问题

  • Dump文件是什么

    Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中

  • 我们拿到Dump文件有什么用的?

    假如JVM因为内存溢出的原因宕机了, 而程序的日志里面并没有关于溢出所在对象的信息, 此时我们就需要通过分析Dump文件来找到问题原因

  • Dump文件怎么生成?

    • 第一种

      在启动JVM时指定参数

        # 指定生成Dump文件的异常类型-XX:+HeapDumpOnOutOfMemoryError# 指定Dump文件生成的位置-XX:HeapDumpPath=/usr/local/jvm/dumps
      
    • 第二种

      如果你在启动JVM时没有指定参数, 那么可以使用第二种方式来生成Dump文件, 使用JVM自带的工具jmap

      jmap -dump:file=/usr/local/jvm/dumps/check.dump PID
      

      PID的获取可以通过ps | top指令来获取

      ps -ef|grep javatop
      

/ 1 / 安装Mat

Mat是Eclipse的一个插件, 也可以独立运行, 所以即使你使用IDEA也可以独立使用Mat
Mat官网下载地址

根据操作系统选择对应的版本即可
下载下来是一个zip压缩包解压即可
Mac解压后是一个.app, 直接运行会报错

我们需要修改一下启动方式或者将.app文件移动到应用程序下

/Users/xxx/Downloads/mat.app/Contents/MacOS/MemoryAnalyzer -data ./workspace

启动后的界面

启动后在导入Dump文件时有可能会报错

An internal error occurred during: "Parsing heap dump from 'xxx.dump'".
Java heap space

这是因为Dump文件的大小超出了Mat默认的读取范围, 我们需要修改Mat的配置文件
找到MemoryAnalyzer.ini文件
Windows/Linux中该文件就在解压缩的目录下
Mac中该文件在mat.app/Contents/Eclipse

-startup
../Eclipse/plugins/org.eclipse.equinox.launcher_1.5.0.v20180512-1130.jar
--launcher.library
../Eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64_1.1.700.v20180518-1200
-vmargs
-Xmx4g
-Dorg.eclipse.swt.internal.carbon.smallFonts
-XstartOnFirstThread

修改-Xmx的值即可

/ 2 / Mat功能介绍

2 . 1 Overview

Dump文件信息, 使用饼状图的方式来展示内存占用的信息

  • Details是文件信息详情, 包含了文件大小、字节码文件大小、对象文件大小、类加载器数量
  • Actions是常用的操作汇总, 与左上角的菜单功能相同

2 . 2 Histogram

Histogram汇总了使用到的类的对象数量以及堆占用空间

我们还可以根据实际情况对Histogram展示的数据进行分类

在结果的第二行<Regex>中我们可以进行模糊查询

2 . 3 Dominator_Tree

Dominator_Tree汇总了堆内存空间中占比最大的对象, 按照空间大小排序, 我们可以通点击左边的箭头符号查看当前对象的引用状况, 最右侧为当前对象所占空间比例

2 . 4 OQL

OQL是Object Query Language的简写,即对象查询语言, 语法与SQL类似, 点击上方的红色感叹号开始执行

2 . 5 Thread_Overview

线程视图, 汇总了Dump文件中所有线程的信息, 按照线程所占用的空间进行排序

2 . 6 Leak Suspects

内存泄漏疑点, 这是Mat根据Dump文件的分析结果得到最有可能导致OOM的疑点, 也是我在使用Mat工具时第一个打开的工具

点击Details查看详细分析信息

2 . 7 Path to GC Roots & Merge Shortest Paths to GC Roots

研究这俩个工具之前我们需要先了解一下GC对不同引用关系之间的区别

2 . 7 . 1 GC对不同引用关系之间的区别
2 . 7 . 2 Path to GC Roots

当前对象到GC Root的路径, 也就是当前对象的引用关系, 该工具只能展示单个对象的引用关系, 所以只能在Dominator_Tree中使用

2 . 7 . 3 Merge Shortest Paths to GC Roots

一组对象到GC Root的最短路径, 效果与Path to GC Roots相同, 可以在Histogram中使用

选择一条数据点击右键并选择Path To GC Roots, 选择展示结果排除需引用、弱引用、软引用, 我们只需要看强引用即可


http://chatgpt.dhexx.cn/article/USNhJo7g.shtml

相关文章

【华为云技术分享】干货分享丨jvm系列:dump文件深度分析

摘要&#xff1a;java内存dump是jvm运行时内存的一份快照&#xff0c;利用它可以分析是否存在内存浪费&#xff0c;可以检查内存管理是否合理&#xff0c;当发生OOM的时候&#xff0c;可以找出问题的原因。那么dump文件的内容是什么样的呢&#xff1f; JVM dump java内存dump是…

Java的dump文件分析及JProfiler使用

Java的dump文件分析及JProfiler使用 1 dump文件介绍 从软件开发的角度上&#xff0c;dump文件就是当程序产生异常时&#xff0c;用来记录当时的程序状态信息&#xff08;例如堆栈的状态&#xff09;,用于程序开发定位问题。 idea配置发生OOM的时候指定路径生成dump文件 # 指定…

获取和分析Dump的几种工具简介

最近在进一步学习support技能的时候&#xff0c;了解到分析Dump的重要性&#xff0c;经过学习&#xff0c;做一些笔记。 一、什么是Dump文件。 Dump文件时进程的内存镜像。可以把程序的执行状态保存到Dump文件中。Dump文件分为内核模式Dump和用户模式Dump。其中内核模式Dump是…

JVM-通过MAT工具对dump文件进行分析

文章目录 MAT工具介绍下载安装使用OverviewHistogramDominator_TreeOQLThread_OverviewLeak Suspects MAT工具介绍 MAT(Memory Analyzer Tool)&#xff0c;一个基于Eclipse的内存分析工具&#xff0c;是一个快速、功能丰富的JAVA heap分析工具&#xff0c;它可以帮助我们查找内…

错误号码2058:Plugin caching sha2_password could not be loaded

安装SQLyog之后&#xff0c;新建接口&#xff0c;输入密码&#xff0c;点击连接&#xff0c;发现出现了如下的错误&#xff1a; 1.错误的原因 SQLyog加密方式出现了错误&#xff0c;这时由于 插件缓存——sha2_密码无法进行加载所导致的。 2.解决方法 在开始菜单中输入命令…

2023/06/28

文章目录 1.export和export default的区别2.npm和cnpm的区别3.npm run dev/serve的区别4.slice、splice和split的区别 1.export和export default的区别 模块功能主要由两个命令构成&#xff1a;export和import。export命令用于规定模块的对外接口&#xff0c;import命令用于输…

02.07 SQLyog连接MySQL数据库时报2058错误(转载)

使用SQLyog连接MySQL时报了这样一个错 “错误号码2058&#xff0c;Plugin caching——sha2_passward could not be loaded:******** ”(乱码) 将报错信息翻译&#xff1a;“插件缓存——sha2_密码无法进行加载”&#xff0c;这是由于你的SQLyog mysql 密码加密方法变了&#…

【C++】2058:【例3.10】简单计算器(信息学奥赛)

好了&#xff0c;今天的内容就是有简单计算器了&#xff0c;内容的详细意思也就是一个最简单的计算器支持&#xff0c;-&#xff0c;*&#xff0c;/四种运算然后根据输入输出结果。&#xff08;博主正在冲200粉丝&#xff0c;喜欢的赶紧关注&#xff01;&#xff01;&#xff0…

【MySQL2058】MySQL远程连接错误码2058

Docker安装的MySQL&#xff0c;突然服务器登录正常&#xff0c;但是使用SQLyog登录报异常&#xff1a; MySQL错误号码 2058上网上巴拉巴拉半天&#xff0c;各种说法都有&#xff0c;最后综合网上各种教程方案&#xff0c;解决了自己的问题&#xff0c;最后将自己的解决方案罗列…

解决SQLyog连接MySQL出现2058错误

解决SQLyog连接MySQL出现2058错误 1、确定你的mysql命令能运行&#xff0c;像下面这样&#xff1a; 2、如果出现这种情况&#xff1a; 解决方法一&#xff1a; 配置系统环境变量path的值&#xff0c;将安装MySQL路径下的bin路径&#xff1a;MySQL安装目录\bin&#xff0c;配置…

SQLyog连接数据库报错2058

命令符界面登录MySQL然后输入命令 ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 新密码; 修改密码的加密方式即可。

使用sqlyog连接数据库时出现错误(2058)解决方法

出现这个原因是MySQL8之前的版本中加密规则是mysql_native_password&#xff0c;而在MySQL8之后&#xff0c;加密规则 是caching_sha2_password。解决问题方法有两种&#xff1b; &#xff08;1&#xff09;第一种是升级图形界面工具版本 &#xff08;2&#xff09;第二种是把M…

SQLyog出现2058错误的解决方法

① WinR打开终端&#xff0c;输入cmd ②输入 mysql -u root -p 然后输入密码 &#xff08;root&#xff09; ③依次执行以下语句 ALTER USER’root’‘localhost’ IDENTIFIED BY ‘root’ PASSWORD EXPIRE NEVER; #修改加密规则 ALTER USER’root’‘localhost’ IDENTIFIED…

使用sqlyog连接mysql时出现错误号码2058的解决方法

1、使用命令行&#xff08;winR --> cmd&#xff09;登录mysql&#xff0c;需要输入密码&#xff1b;若出现如下界面&#xff0c;登录成功。 2、输入 use mysql&#xff1b;&#xff08;分号要有&#xff09; 3、输入 select user,host from user; 出现如下界面。 4、从上…

SQLyog连接MySQL8.0.24远程服务器 ,报错:2058的解决方法

写在前面&#xff1a; 我热爱技术&#xff0c;热爱分享&#xff0c;热爱生活&#xff0c; 我始终相信&#xff1a;技术是开源的&#xff0c;知识是共享的&#xff01; 博客里面的内容大部分均为原创&#xff0c;是自己日常的学习记录和总结&#xff0c;便于自己在后面的时间里回…

sqlyog连接mysql错误码2058

一、⾸先保证你的MySQL数据库安装成功 cmd命令下mysql -u root -p 连接出错如上&#xff0c;原因是加密⽅式变了&#xff0c;现在是root的授权没刷新&#xff0c;我们重置⼀下密码。sqlyog配置新连接报错&#xff1a;错误号码2058&#xff0c;是因为mysql密码加密⽅法变了。 …

SQLyog连接mysql8.0时报错(错误号码2058)

本文将详细说明解决SQLyog连接mysql8.0时&#xff0c;SQLyog Ultimate显示报错信息并附带乱码&#xff1a;“错误号码2058&#xff0c;Plugin caching——sha2_passward could not be loaded:******** ”(最后一段信息是乱码)。 如下图所示&#xff1a; 将报错信息翻译过来就是…

SQLyog连接MySQL时出现2058错误解决方法

解决方案 第一步 WinR→cmd打开命令提示符&#xff0c; 输入以下命令&#xff1a;mysql -u root -p 1.1 提示Enter password&#xff0c;输入密码即可 1.2 如果提示“mysql不是内部或外部命令&#xff0c;也不是可运行的外部程序或批处理文件。” 如下图 解决此错误有两种…

Mysql出现问题:ERROR 2058: Plugin caching_sha2_passward could not be loaded解决方案

回城传送–》《数据库问题解决方案》 ❤️作者主页:小虚竹 ❤️作者简介:大家好,我是小虚竹。Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作者🏆,阿里云专家博主🏆,51CTO专家博主🏆 ❤️技术活,该赏 ❤️点赞 👍 收藏 ⭐再看,养成…

mysql出现2058,连接MySQL报“Error No.2058 Plugin caching_sha2_password could not be loaded”

问题重现 使用sqlyog连接linux系统下docker中的mysql8.0.11时报错plugin caching_sha2_password could not be loaded 问题原因 MySQL8.0新版默认使用caching_sha2_password作为身份验证插件&#xff0c;而旧版是使用mysql_native_password 而sqlyog默认是使用mysql_native_…