[转帖]使用MAT命令行工具生成堆dump分析文件
https://www.cnblogs.com/hellxz/p/use_mat_linux_command_line_generate_reports.html
写作目标
Java程序运行过程中,难免会出现 OOM,往往是在 JVM 启动参数中添加出现 OOM 时输出堆 dump(又名:堆转储、堆快照)的参数,就在昨天下午我司生产环境出现 OOM,生成的堆 dump 有 16 个G,压缩后传回本地,想分析时犯了难——本地开发机 16G 内存,用 MAT 打不开!
通过查询相关文档,发现可以使用 MAT 命令行脚本生成可供 MAT 图形化界面展示的文件,也就是 用 Linux 服务器进行分析大堆/超大堆 dump 文件,输出分析报告,通过浏览器直接查看!
运行环境
- CentOS 7.4
- MemoryAnalyzer-1.10.0.20200225-linux.gtk.x86_64.zip
- 16G堆dump
- 开发机Win10,16G内存
MAT 下载地址 http://www.eclipse.org/mat/downloads.php
操作步骤
1 上传并解压 MAT 到服务器
上传 MAT 压缩包到服务器上
解压缩到Home目录
| unzip -q Memory*.zip -d /home/hellxz |

2 上传堆 dump 文件到服务器
生产环境打堆 dump 及压缩,仅作演示,我这边是自动打出来的。
| # 生成堆 dump | |
| jmap -dump:format=b,file=heap_dump_20210128-1505.hprof 10532 | |
| # 压缩堆 dump | |
| tar zcf /data/heap_dump_20210128-1505.tar.gz \ | |
| heap_dump_20210128-1505.hprof |
tar.gz压缩16G的堆dump仅占 4.77G,这里上传到了 MAT 分析服务器 /home/hellxz/performance 目录下
| cd performance | |
| tar zxf heap_dump_20210128-1505.tar.gz |

3 调整 MAT 配置文件
| cd /home/hellxz/mat | |
| ls | |
| vim MemoryAnalyzer.ini |

| -startup | |
| plugins/org.eclipse.equinox.launcher_1.5.0.v20180512-1130.jar | |
| --launcher.library | |
| plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.700.v20180518-1200 | |
| -vmargs | |
| -Xms30g | |
| -Xmx58g | |
| -XX:+UseG1GC | |
| -DhprofStrictnessWarning=true |
-vmargs下边是指定JVM参数的地方,默认的-Xmx1024m太小了,另外,我这个堆实在太大,试了好多遍,发现58g左右才不会溢出……如果在后续操作中出现报错为heap space而停止分析,说明堆内存小了,改它!-DhprofStrictnessWarning=true参数最好加上,防止因为某些不必要的提示停止分析
4 执行 MAT 分析堆dump
| cd /home/hellxz/mat | |
| #执行 MAT 命令行脚本 | |
| ./ParseHeapDump.sh \ | |
| /home/hellxz/performance/heap_dump_20210128-1505.hprof \ | |
| org.eclipse.mat.api:suspects \ | |
| org.eclipse.mat.api:overview \ | |
| org.eclipse.mat.api:top_components |
- MAT 会将文件分析文件与临时文件输出到堆 dump 目录下,临时文件中包含 .index 结尾的索引文件,首次分析会建立索引速度较慢,后续再执行其他任务就很快了
suspects/overview/top_componets这几个 API 与 MAT 界面上显示的区域是一致的,对应这个命令中是 3 个任务,即生成名为xxx_Leak_Suspects.zip/xxx_System_Overview.zip/xxx_Top_Components.zip的分析报告,可选择分析三者任几个任务- 如执行出现错误,请去文末查找错误解决方法

MAT 分析时间较长,等待一段时间后,能得到三个 zip 压缩包xxx_Leak_Suspects.zip / xxx_System_Overview.zip / xxx_Top_Components.zip,xxx 会被替换为堆 dump 的名称
5 使用浏览器查看报告
将 xxx_Leak_Suspects.zip / xxx_System_Overview.zip / xxx_Top_Components.zip 三个压缩包下载到本地,分别解压,双击 index.html 使用浏览器查看即可。
如图,打开了 Leak_Suspects 解压的 index.html

真不是我屏幕黄,是校色工具搞的……
Q&A
1 提示X11转发打开窗口
取消打开窗口则报错: java.lang.InternalError: Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable.
解决办法:
| echo "export DISPLAY=:1" /etc/profile | |
| source /etc/profile |
对于安装了桌面的临时处理办法,用完后修改回来,如果没装桌面就不用改回来了
2 提示 heap space,停止分析
设置mat目录下的 MemoryAnalyzer.ini,在 -vmargs 下调整JVM最大堆大小
3 提示 Unable to initialize GTK+
ParseHeapDump.sh 执行时调用了GTK的组件,当前OS环境不满足就会报错,解决方式是绕过GTK组件:
1)获取启动包路径
| cd mat | |
| ls plugins/org.eclipse.equinox.launcher*.jar |

复制红字部分,一会改脚本需要用
2)修改 ParseHeapDump.sh
| cd mat | |
| vim ParseHeapDump.sh |
注释第11行,添加新的启动命令
| java -Xmx16g -DhprofStrictnessWarning=true -jar \ | |
| "$(dirname -- "$0")"/plugins/org.eclipse.equinox.launcher_1.5.0.v20180512-1130.jar \ | |
| -consolelog -application org.eclipse.mat.api.parse "$@" |

-jar前为自定义JVM参数plugins/org.eclipse.equinox.launcher_1.5.0.v20180512-1130.jar请替换为第一步中获取的jar包名
未经许可禁止转载,如需转载请注明出处!https://www.cnblogs.com/hellxz/p/use_mat_linux_command_line_generate_reports.html
本文同步于本人CSDN
本文作者:东北小狐狸
本文链接:https://www.cnblogs.com/hellxz/p/use_mat_linux_command_line_generate_reports.html
版权声明:本作品采用自由转载-非商用-非衍生-保持署名 (CC BY-NC-ND 3.0)许可协议进行许可。
[转帖]使用MAT命令行工具生成堆dump分析文件的更多相关文章
- FFmpeg命令行工具学习(三):媒体文件转换工具ffmpeg
一.简述 ffmpeg是一个非常强大的工具,它可以转换任何格式的媒体文件,并且还可以用自己的AudioFilter以及VideoFilter进行处理和编辑.有了它,我们就可以对媒体文件做很多我们想做的 ...
- Windows 编程,程序编译使用的命令行工具。
Windows 编程,程序编译使用的命令行工具. 1.cl.exe文件是Visual C\C++的编译器,它将程序源代码文件编译为obj文件. 2.rc.exe文件是资源编译器.工程项目中的.rc文件 ...
- 将Python模块转变为命令行工具
问:如何输入命令行就能执行python代码呢? 答:要将python模块转变为命令行工具只用在 setup.py 文件中添加参数entry_points 例如: entry_points={ 'con ...
- JDK的命令行工具
Jcmd:综合工具 jcmd -l 列出当前运行的所有虚拟机 参数-l表示列出所有java虚拟机,针对每一个虚拟机,可以使用help命令列出该虚拟机支持的所有命令 jcmd [pid] help j ...
- 20个命令行工具监控Linux系统性能
作为Linux/Unix 系统管理员需要掌握一些常用的工具用于检测系统性能.在这里,dodo为大家推荐非常20个有用的并且最常用的命令行系统监视工具: 1. top -Linux系统进程监控 top ...
- JVM性能监控与故障处理命令行工具
JDK命令行工具 Sun公司作为”礼物“赠送给JDK使用者的工具: 这些命令行工具大多是jdk/lib/tools.jar类库的一层薄包装,主要功能代码是在tools类库(不属于java的标准API) ...
- 20个命令行工具监控 Linux 系统性能(转载)
1. top — Linux 系统进程监控 top 命令是性能监控程序,它可以在很多 Linux/Unix 版本下使用,并且它也是 Linux 系统管理员经常使用的监控系统性能的工具.Top 命令可以 ...
- 20个命令行工具监控 Linux 系统性能
对于每个系统管理员或网络管理员来说,每天要监控和调试 Linux 系统性能问题都是非常困难的工作.我已经有5年 Linux 管理员的工作经历,知道如何监控系统使其保持正常运行.为此,我们编写了对于 L ...
- Android命令行工具logcat详细用法!
logcat是Android中一个命令行工具,可以用于得到程序的log信息. 见板凳详细说明! 本贴内容来自网络,引用网址为:http://hi.baidu.com/%C9%C1%D2%AB% ...
- 20个命令行工具监控 Linux 系统性能【转载】
对于每个系统管理员或网络管理员来说,每天要监控和调试 Linux 系统性能问题都是非常困难的工作.我已经有5年 Linux 管理员的工作经历,知道如何监控系统使其保持正常运行.为此,我们编写了对于 L ...
随机推荐
- vulntarget-d-wp
vulntarget-d 配置信息 系统 ip kali 192.168.130.5 ubuntu 18 ip1: 192.168.130.8 ip2: 10.0.10.1 win7 10.0.10. ...
- rust angular 自签名证书 wss
项目中采用 wss 来建立的前后端连接, 但是并没有用到认证的证书, 所以自己用 openssl 生成了私钥, 自签名证书来使用: 这里就不再赘述 Wss 连接过程, 直接上手操作: 1. 生成私钥, ...
- 文心一言 VS 讯飞星火 VS chatgpt (36)-- 算法导论5.3 6题
六.请解释如何实现算法 PERMUTE-BY-SORTING,以处理两个或更多优先级相同的情形.也就是说,即使有两个或更多优先级相同,你的算法也应该产生一个均匀随机排列. 文心一言: 算法 PERMU ...
- 大数据场景下Volcano高效调度能力实践
摘要:本篇文章将会从Spark on Kubernetes 发展历程以及工作原理,以及介绍一下Spark with Volcano,Volcano如何能够帮助 Spark运行地更高效. Spark o ...
- 华为云数据库GaussDB(for openGauss):初次见面,认识一下
摘要:本文从总体架构.主打场景.关键技术特性等方面进行介绍GaussDB(for openGauss). 1.背景介绍 3月16日,在华为云主办的GaussDB(for openGauss)系列技术第 ...
- 物联网企业该如何与华为云合作,这份FAQ值得一看
摘要:关于华为云DevRun智联生活行业加速器,梳理出伙伴和企业最关心的问题,并逐一解答. 自华为云DevRun智联生活行业加速器发布以来,一直在为产业链上下游的企业提供技术.生态建设.商业变现等资源 ...
- 云图说|初识数据库和应用迁移UGO
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:数据库和应用迁移 ...
- 提速 10 倍!深度解读字节跳动新型云原生 Spark History Server
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 前不久,在 6月29日 Databricks 举办的 Data + AI Summit 上,火山引擎向大家首次介绍 ...
- linux tar解压命令总结
把常用的tar解压命令总结下,当作备忘: -c:建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可 ...
- #pragma的常用方法
概述 我们在写代码时,总会遇到头文件多次包含的情况,刚开始时我们使用宏定义进行控制,之后发现有#pragma once这样简单的东西,当时是很兴奋,以为#pragma就这一种用法.唉~,现在想想当时还 ...