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.zipxxx 会被替换为堆 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分析文件的更多相关文章

  1. FFmpeg命令行工具学习(三):媒体文件转换工具ffmpeg

    一.简述 ffmpeg是一个非常强大的工具,它可以转换任何格式的媒体文件,并且还可以用自己的AudioFilter以及VideoFilter进行处理和编辑.有了它,我们就可以对媒体文件做很多我们想做的 ...

  2. Windows 编程,程序编译使用的命令行工具。

    Windows 编程,程序编译使用的命令行工具. 1.cl.exe文件是Visual C\C++的编译器,它将程序源代码文件编译为obj文件. 2.rc.exe文件是资源编译器.工程项目中的.rc文件 ...

  3. 将Python模块转变为命令行工具

    问:如何输入命令行就能执行python代码呢? 答:要将python模块转变为命令行工具只用在 setup.py 文件中添加参数entry_points 例如: entry_points={ 'con ...

  4. JDK的命令行工具

    Jcmd:综合工具 jcmd -l  列出当前运行的所有虚拟机 参数-l表示列出所有java虚拟机,针对每一个虚拟机,可以使用help命令列出该虚拟机支持的所有命令 jcmd [pid] help j ...

  5. 20个命令行工具监控Linux系统性能

    作为Linux/Unix 系统管理员需要掌握一些常用的工具用于检测系统性能.在这里,dodo为大家推荐非常20个有用的并且最常用的命令行系统监视工具: 1. top -Linux系统进程监控 top ...

  6. JVM性能监控与故障处理命令行工具

    JDK命令行工具 Sun公司作为”礼物“赠送给JDK使用者的工具: 这些命令行工具大多是jdk/lib/tools.jar类库的一层薄包装,主要功能代码是在tools类库(不属于java的标准API) ...

  7. 20个命令行工具监控 Linux 系统性能(转载)

    1. top — Linux 系统进程监控 top 命令是性能监控程序,它可以在很多 Linux/Unix 版本下使用,并且它也是 Linux 系统管理员经常使用的监控系统性能的工具.Top 命令可以 ...

  8. 20个命令行工具监控 Linux 系统性能

    对于每个系统管理员或网络管理员来说,每天要监控和调试 Linux 系统性能问题都是非常困难的工作.我已经有5年 Linux 管理员的工作经历,知道如何监控系统使其保持正常运行.为此,我们编写了对于 L ...

  9. Android命令行工具logcat详细用法!

    logcat是Android中一个命令行工具,可以用于得到程序的log信息. 见板凳详细说明!     本贴内容来自网络,引用网址为:http://hi.baidu.com/%C9%C1%D2%AB% ...

  10. 20个命令行工具监控 Linux 系统性能【转载】

    对于每个系统管理员或网络管理员来说,每天要监控和调试 Linux 系统性能问题都是非常困难的工作.我已经有5年 Linux 管理员的工作经历,知道如何监控系统使其保持正常运行.为此,我们编写了对于 L ...

随机推荐

  1. DDD落地实践-架构师眼中的餐厅 | 京东云技术团队

    本文以餐厅场景为叙事主线,以领域驱动为核心思想,结合架构设计与功能设计方法论.是从领域分析到落地的全过程案例,内容偏重于落地,因此不乏一些探讨,欢迎指正. 文章较长.全程干货.耐心读完.必有收获. 本 ...

  2. HDU 4705 立方和拆解

    HDU 4705 立方和拆解 题意 给一棵树,找出所有的(A,B,C)三元组的数量,满足ABC不能同时被一条路径覆盖 思路 首先可以明确的是,对于每个入度大于等于3的点(也就是有两个或以上儿子的节点) ...

  3. Rasa初始化聊天机器人的配置

      本文详细介绍了使用 rasa init 初始化聊天机器人项目的配置,包括 nlu.yml.rules.yml.stories.yml.test_stories.yml.config.yml.cre ...

  4. 记一次kubernetes获取internal Ip错误流程

    本文分享自华为云社区<记一次kubernetes获取internal Ip错误流程>,作者:张俭. 偶尔也回首一下处理的棘手问题吧.问题的现象是,通过kubernetes get node ...

  5. 解析数仓lazyagg查询重写优化

    摘要:本文对Lazy Agg查询重写优化和GaussDB(DWS)提供的Lazy Agg重写规则进行介绍. 本文分享自华为云社区<GaussDB(DWS) lazyagg查询重写优化解析[这次高 ...

  6. 如何使用参数化查询提高Cypher查询的性能

    摘要:在DBMS中,参数化查询被视为一种有效预防SQL注入攻击的手段. 本文分享自华为云社区<使用参数化查询提高Cypher查询的性能:以华为云图引擎GES为例>,作者: 蜉蝣与海. 在D ...

  7. vmware14安装centos8

    vmware14 推荐,直接选取centos8镜像,然后安装,发现是无法安装的. 然后选择自定义安装,然后,选择客户机操作系统,只有centos7 64位,没有centos8 64位的. 搜了一下,看 ...

  8. Netty ChannelFuture 监听三种方法

    以下是伪代码 方法一 前后代码省略 //绑定服务器,该实例将提供有关IO操作的结果或状态的信息 ChannelFuture channelFuture = bootstrap.bind(); this ...

  9. 【申请教程】ChatGPT访问互联网插件

    https://openai.com/blog/chatgpt-plugins 大家好,我是章北海mlpy 申请ChatGPT插件很久了,一直没下文 最近看到两种套路,我早上试了一下,看能否快速成功吧 ...

  10. BBS项目(四):临时评论渲染 文章子评论功能 后台管理页面搭建 添加文章页面搭建

    目录 临时评论样式渲染 文章子评论业务逻辑 后台管理页面搭建 后台管理页面模板创建 添加文章页面搭建 富文本编辑器 添加文章初步实现 添加文章功能优化 beautifulsoup模块基本使用 临时评论 ...