MAT的简单学习
背景说明
- Java遇到问题之后比较浅层的跟踪解决办法:
jps 查看进程的main jar包 对应的进程信息
jstack 查看 堆栈信息
top -Hp PID 实时查看具体的CPU进程信息.
如果非GC进程占用CPU比较高可以使用
print %x $SID 打印出 十六进制的 进程信息.
jstack -l $PID |grep %x -A 20 查看占用CPU搞高的进程的信息.
jmap -heap $PID 查看进程的堆信息.
jmap -histio $PID 类的直方图
jmap -dump:format=b,file=xxx.dump $PID 获取dump信息.
- 如果是出现比较难解决的问题 可能无法使用基本的 java 内嵌命令解决问题.
- 这个时候需要使用 Memory Analyzer Tools MAT 来分析内存.
下载与使用
- 最新的下载地址
https://ftp.jaist.ac.jp/pub/eclipse/mat/1.12.0/rcp/MemoryAnalyzer-1.12.0.20210602-win32.win32.x86_64.zip
https://ftp.jaist.ac.jp/pub/eclipse/mat/1.12.0/rcp/MemoryAnalyzer-1.12.0.20210602-linux.gtk.x86_64.zip
- 可以在某些目录执行解压缩即可.
- 注意配置文件
- 需要说明的是这个版本的MAT需要至少jdk11以上的版本,如果你的JDK不是很高,建议使用低一些的版本
注意在打开MAT之前可以设置一下内存参数
参数文件与MemoryAnalyzer.exe 这个文件夹同级, 文件名为:MemoryAnalyzer.ini
-startup
plugins/org.eclipse.equinox.launcher_1.5.0.v20180512-1130.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.700.v20180518-1200
-vmargs
-Xmx64G
-Xms64G
比如我这边的一个机器是 256G内存的 Win2016, 我这边就设置了 64G的堆区 便于快速分析堆栈信息
如果运行产品的JVM的堆栈设置的较大, 内存dump会变得更大, 解析起来比较慢一些
一般情况下20G 左右的dump文件,会耗时半个小时以上才可以进行解析.
分析dump
- mat分析dump文件有两种方式
第一种可以打开本地环境里面的进程信息.
Acquire Heap dump 的方式
第二种打开其他机器转储好的dump文件
Open Heap dump 的方式
注意: 一般情况下采用第二种. 生产环境直接上的可能性很小,会导致更多的性能问题.
- 需要注意事项如下, parse过程中会产生大量的索引文件, 可能比整个dump的文件还要大
- 所以建议解析dump的情况下,磁盘空间务必要充足, 不然会因为磁盘空间不足导致解析失败
- 另外解析过程中磁盘IO也比较高,建议使用高效的磁盘进行解析.以提高效率.
Mat Windows
- 打开dump文件进行长时间的 parse之后 可以使用 windows操作窗格进行简要处理
- 可以打开dump的明细信息 查看dump的一些主要特点
- 可以打开dump 的历史记录,查看其他分析的内容.
- 可以使用设置,修改显示的大小设置,比如设置为MB 大小便于查看(年老眼花专用设置)
核心功能
- 重要功能图

核心功能
- 说明: 我这边仅是简单应用还未深入.
核心的是dump文件下面的一排按钮, 还有内存信息下方的报告几个按钮
一排按钮信息简要如下:
一个i是overview 概要信息
三个竖线是部分对象的直方图
第三个按钮是 支配树,这个功能比较重要: 能够看到 较大对象里面的 核心内容, 便于识别是什么模块的问题. 进行定位.
第四个按钮 可以进行查询, 我这边暂时没用过.
第五个按钮 展示所有的进程的堆栈信息,以及堆栈的保留大小等.
需要注意的是 内存大小有两个:
shallow heap 一般称之为浅堆 可能对象当前属于自己的大小
retained heap 一般称之为深堆, 一个算法是 这个对象内gc回收时 能够回收涉及级联所有对象的大小.
我这边图里面深堆最大的对象就是一个 memory leak的点.
注意 第五个按钮其实是report
注意与下面的的report是一致的
比较重要的是 leak suspect 内存泄漏检测
这个功能可能比较费时,但是查询出来可能比较完备.
一般一个进程dump 一个 memory leak 就足够撑爆了.
注意 第六个 按钮就是query tool 能够查看各种对象.
这个需要很深入的功底了, 我这边暂时也没有用到(正在入门)
MAT的简单学习的更多相关文章
- Log4j简单学习笔记
log4j结构图: 结构图展现出了log4j的主结构.logger:表示记录器,即数据来源:appender:输出源,即输出方式(如:控制台.文件...)layout:输出布局 Logger机滤器:常 ...
- shiro简单学习的简单总结
权限和我有很大渊源. 培训时候的最后一个项目是OA,权限那块却不知如何入手,最后以不是我写的那个模块应付面试. 最开始的是使用session装载用户登录信息,使用简单权限拦截器做到权限控制,利用资源文 ...
- CentOS 简单学习 firewalld的使用
1. centos7 开始 使用firewalld 代替了 iptables 命令工具为 firewall-cmd 帮助信息非常长,简单放到文末 2. 简单使用 首先开启 httpd 一般都自带安装了 ...
- Windows 下 Docker 的简单学习使用过程之一 dockertoolbox
1. Windows 下面运行 Docker 的两个主要工具1): Docker for Windows2): DockerToolbox区别:Docker For Windows 可以理解为是新一代 ...
- 在MVC中实现和网站不同服务器的批量文件下载以及NPOI下载数据到Excel的简单学习
嘿嘿,我来啦,最近忙啦几天,使用MVC把应该实现的一些功能实现了,说起来做项目,实属感觉蛮好的,即可以学习新的东西,又可以增加自己之前知道的知识的巩固,不得不说是双丰收啊,其实这周来就开始面对下载在挣 ...
- Linux——帮助命令简单学习笔记
Linux帮助命令简单学习笔记: 一: 命令名称:man 命令英文原意:manual 命令所在路径:/usr/bin/man 执行权限:所有用户 语法:man [命令或配置文件] 功能描述:获得帮助信 ...
- OI数学 简单学习笔记
基本上只是整理了一下框架,具体的学习给出了个人认为比较好的博客的链接. PART1 数论部分 最大公约数 对于正整数x,y,最大的能同时整除它们的数称为最大公约数 常用的:\(lcm(x,y)=xy\ ...
- mongodb,redis简单学习
2.mongodb安装配置简单学习 配置好数据库路径就可以mongo命令执行交互操作了:先将服务器开起来:在开个cmd执行交互操作 ...
- html css的简单学习(三)
html css的简单学习(三) 前端开发工具:Dreamweaver.Hbuilder.WebStorm.Sublime.PhpStorm...=========================== ...
- html css的简单学习(二)
html css的简单学习(二) <!Doctype html>告诉浏览器,这是一个html文档.lang="en" 默认是en,表示英语:zh-Hans 中文简体:z ...
随机推荐
- 云小课|MRS基础原理之Flink组件介绍
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:Flink是一个批 ...
- 千年荒漠变绿洲,看沙漠“卫士”携手昇腾AI植起绿色希望
摘要:风沙肆虐,沙漠侵蚀神州大地,华东师范大学基于昇腾AI基础软硬件平台研制的种树机器人成为沙漠"卫士",穿越戈壁,跨越千里,为荒漠治理贡献力量!华师大携手昇腾AI共同植起绿色希望 ...
- 云原生势不可挡,华为云GaussDB加速企业数字化转型
4月8日,华为云TechWave全球技术峰会在深圳成功举办,其中,在围绕"数据使能,驱动业务增长"为主题的数据使能分论坛会上,华为云GaussDB技术专家胡彦军现场分享了云原生数据 ...
- 补齐OLAP引擎短板!ByteHouse 是如何实现流批一体的?
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 计算机领域一直流传一句话--"没有银弹",这句话出自计算机科学家布鲁克斯<没有银弹& ...
- Linux 查找进程所在目录
查找进程所在目录位置 # 打出进程ID [root@iZuf64tp28136djioi3ki8Z /]# ps -ef|grep redis root 3451 1 0 Jun10 ? 07:02: ...
- 【Flask】cbv源码分析 flask模板使用 flask请求与响应 session及源码分析 闪现flash 请求扩展
目录 上节回顾 今日内容 1 cbv分析 1.1 源码分析 2 模板 2.1 app.py 2.2 index.html 3 请求与响应 4 session及源码分析 4.1 session的使用 4 ...
- redis之列表 redis之hash redis其他操作 redis管道 django中使用redis celery介绍和安装 celery快速使用 celery包结构
目录 昨日回顾 今日内容 1 redis之列表 2 redis之hash 3 redis其他操作 4 redis 管道 5 django中使用redis 6 celery介绍和安装 7 celery快 ...
- three.js 消防模拟火焰烟雾效果
ParticleEngine.js实现烟雾效果 参考网址:http://stemkoski.github.io/Three.js/Particle-Engine.html ParticleEngine ...
- Codeforces Round #730 (Div. 2) A~D题个人题解
比赛链接:Here 1543A. Exciting Bets math, 给定两个数字 \(a,b (a,b \le 1e18)\) 和以下两种操作: \(a + 1,b+1\) \(a-1,b-1\ ...
- 【每日一题】12.Running Median (对顶堆)
补题链接:Here 题意:动态的维护中位数的问题,依次读入一个整数,每当总个数为奇数时输出此时序列的中位数 使用对顶堆的在线做法. 为了实时找到中位数,我们可以建议两个二叉堆:一个小根堆.一个大根堆. ...