摘要

mat可以很好的进行jvm的内存dump的分析.
但是大部分服务器是没有GUI界面的.
而且就算是有GUI界面也很难直接使用.
但是随着jvm堆区越来越大. WindowsPC机器已经很难进行分析.
所以基于此. 想着能够使用Linux进行简要分析
然后使用Windows进行打开.
根据网上查到的资料进行了简单的测试验证. 准备进行一次处理.

学习来源

https://www.cnblogs.com/hellxz/p/use_mat_linux_command_line_generate_reports.html
感谢原作者
为了方便使用, 我这边进行了一下简单处理, 提高了一定的效率.

下载mat的介质

注意下载地址为:
https://www.eclipse.org/mat/downloads.php
需要注意,进入下载界面可以选择大陆的大学mirro镜像站点速度会快很多. 需要注意, 最新的1.13 的版本需要使用 jdk17以上的版本
建议可以下载最新的JDK进行处理. 我这边使用的OpenJDK19.0.1
自行下载tar包或者是zip包即可.

解压缩mat.并且手工添加jdk

解压缩好mat的文件后
建议将jdk解压缩到mat的目录下面.
这种方式最简单, 不需要使用linux或者是windows的环境变量内的java程序
能够方便快捷的进行部署.
比如linux的目录为:
需要注意:
1. dumpanalyze 是我手工编写的命令行脚本
2. jdk-19.0.1 是Openjdk的目录. .
├── configuration
├── dumpanalyze
├── epl-2.0.html
├── features
├── jdk-19.0.1
├── MemoryAnalyzer
├── MemoryAnalyzer.ini
├── notice.html
├── p2
├── ParseHeapDump.sh
├── plugins
└── workspace

修改配置文件, 注意这一步需要根据linux机器的配置

比如我这边的文件修改为:
需要注意:
1. -vm 指定java的二进制地址,便于区分版本,jdk添加进来可以节约很多工作量.
2. -Xmx -Xms 注意不能大于操作系统剩余内存的 80%
3. -DhprofStrictnessWarning=true 出现错误时可以忽略.
4. 注意务必不能在正在生产的服务器上面进行此动作.
vim MemoryAnalyzer.ini -vm
./jdk-19.0.1/bin/java
-startup
plugins/org.eclipse.equinox.launcher_1.6.400.v20210924-0641.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.2.400.v20211117-0650
-vmargs
-Xmx30G
-Xms30G
-DhprofStrictnessWarning=true

编写分析脚本

需要注意:
1. 我这边仅是简单read -p 读入文件路径, 最简单的进行处理.
2. 注意解析完成之后 会在dump同级目录生成很多index文件,以及三个zip文件
3. zip文件可以解压缩后通过浏览器打开. index文件可以使用windows的同版本mat进行打开
4. 理论上分析过了一遍的dump, 统计目录有index目录,再次就不需要分析,仅需要打开就可以了.
5. 因为比较晚上, 改天白天我验证一下, 然后提醒我删掉 第五条. vim dumpanalyze echo "请输入完整的 dump路径名进行分析: "
read -p "文件全路径+文件名: " dumpname
./ParseHeapDump.sh \
$dumpname \
org.eclipse.mat.api:suspects \
org.eclipse.mat.api:overview \
org.eclipse.mat.api:top_components

Windows版本的处理

Windows版本很类似 只需要修改配置文件就可以.
编辑 MemoryAnalyzer.ini
注意 -vm 使用当前路径下的jdk就可以 简单便捷. -vm
jdk-19.0.1/bin/java
-startup
plugins/org.eclipse.equinox.launcher_1.6.400.v20210924-0641.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.2.400.v20211117-0650
-vmargs
-Xmx4G

其他优化

mat 有一个batch mode 模式
计划简单学习一下 用来完善这个文档.
需要完善的点
1. compare模式.
2. 大内存dump的验证 解析过的效果为:
[root@openeuler2203 ~]# ll
总用量 652M
-rw-r--r-- 1 root root 5.5M 11月 22 00:25 zhaobsh.a2s.index
-rw-r--r-- 1 root root 18M 11月 22 00:25 zhaobsh.domIn.index
-rw-r--r-- 1 root root 43M 11月 22 00:25 zhaobsh.domOut.index
-rw------- 1 root root 344M 11月 22 00:24 zhaobsh.dump
-rw-r--r-- 1 root root 142K 11月 22 00:25 zhaobsh.i2sv2.index
-rw-r--r-- 1 root root 46M 11月 22 00:25 zhaobsh.idx.index
-rw-r--r-- 1 root root 52M 11月 22 00:25 zhaobsh.inbound.index
-rw-r--r-- 1 root root 4.4M 11月 22 00:25 zhaobsh.index
-rw-r--r-- 1 root root 128K 11月 22 00:25 zhaobsh_Leak_Suspects.zip
-rw-r--r-- 1 root root 18M 11月 22 00:25 zhaobsh.o2c.index
-rw-r--r-- 1 root root 45M 11月 22 00:25 zhaobsh.o2hprof.index
-rw-r--r-- 1 root root 30M 11月 22 00:25 zhaobsh.o2ret.index
-rw-r--r-- 1 root root 52M 11月 22 00:25 zhaobsh.outbound.index
-rw-r--r-- 1 root root 83K 11月 22 00:25 zhaobsh_System_Overview.zip
-rw-r--r-- 1 root root 27K 11月 22 00:24 zhaobsh.threads
-rw-r--r-- 1 root root 482K 11月 22 00:25 zhaobsh_Top_Components.zip

Linux无头模式使用mat分析dump的方法的更多相关文章

  1. Linux字符模式下如何设置/删除环境变量

    Linux字符模式下设置/删除环境变量方法: bash下 设置:export 变量名=变量值 删除:unset 变量名 csh下 设置:setenv 变量名 变量值 删除:unsetenv 变量名 h ...

  2. 使用MAT(Memory Analyzer Tool)工具分析dump文件--转

    原文地址:http://gao-xianglong.iteye.com/blog/2173140?utm_source=tuicool&utm_medium=referral 前言 生产环境中 ...

  3. 【转载】linux环境下tcpdump源代码分析

    linux环境下tcpdump源代码分析 原文时间 2013-10-11 13:13:02  CSDN博客 原文链接  http://blog.csdn.net/han_dawei/article/d ...

  4. linux环境下tcpdump源代码分析

    Linux 环境下tcpdump 源代码分析 韩大卫@吉林师范大学 tcpdump.c 是tcpdump 工具的main.c, 本文旨对tcpdump的框架有简单了解,只展示linux平台使用的一部分 ...

  5. 使用MAT分析内存泄露

    使用MAT分析内存泄露 对于大型服务端应用程序来说,有些内存泄露问题很难在测试阶段发现,此时就需要分析JVM Heap Dump文件来找出问题.随着单机内存越来越大,应用heap也开得越来越大,动辄十 ...

  6. 在Eclipse中使用MAT分析Android程序内存使用状况(转)

    对于Android这种手持设备来说,通常不会带有太大的内存,而且一般用户都是长时间不重启手机,所以编写程序的时候必须要非常小心的使用内存,尽量避免有内存泄露的问题出现.通常分析程序中潜在内存泄露的问题 ...

  7. 使用Memory Analyzer tool(MAT)分析内存泄漏(二)

    转载自:http://www.blogjava.net/rosen/archive/2010/06/13/323522.html 前言的前言 写blog就是好,在大前提下可以想说什么写什么,不像投稿那 ...

  8. 使用Memory Analyzer tool(MAT)分析内存泄漏

    前言的前言 写blog就是好,在大前提下可以想说什么写什么,不像投稿那么字字斟酌.上周末回了趟成都办事,所以本文来迟了.K117从达州经由达成线往成都方向走的时候,发现铁路边有条河,尽管我现在也不知道 ...

  9. Linux信号(signal) 机制分析

    Linux信号(signal) 机制分析 [摘要]本文分析了Linux内核对于信号的实现机制和应用层的相关处理.首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理.接着分析了内核 ...

  10. linux内核SPI总线驱动分析(一)(转)

    linux内核SPI总线驱动分析(一)(转) 下面有两个大的模块: 一个是SPI总线驱动的分析            (研究了具体实现的过程) 另一个是SPI总线驱动的编写(不用研究具体的实现过程) ...

随机推荐

  1. 高效联调,可靠发布!华为云推出CodeArts Release发布管理服务

    摘要:华为云全新推出CodeArts Release发布管理服务,旨在将华为多年形成的发布实践外溢,帮助企业提升软件发布质量和效率,降低生产环境的发布风险. 本文分享自华为云社区<高效联调,可靠 ...

  2. 云小课|聊一聊DRS的数据过滤特性

    [本期推荐专题]在DevOps市场中,华为云DevCloud拔得头筹,看它如何助力企业面对商业环境瞬息万变快速响应. [摘要] 目前,DRS已支持其他云.本地IDC.ECS自建MySQL.SQL Se ...

  3. 据说有人面试栽在了Thread类的stop()方法和interrupt()方法上

    摘要:今天就简单的说说Thread类的stop()方法和interrupt()方法到底有啥区别. 本文分享自华为云社区<[高并发]又一个朋友面试栽在了Thread类的stop()方法和inter ...

  4. Chrome扩展程序导出备份与本地导入浏览器

    现在即使在国内下载个chrome,转个插件也千难万难.现在科学下网也越来越难,由于众所周知的原因,连qiang这个话题都是敏感词.哀默于心死,还是回避这个话题 只要把之前装的chrome打包,然后再重 ...

  5. MySQL java new dat() 后插入数据库的时间不一致

    别用时间字段,做为关联字段,代码里的时间和插到数据库中有误差 MySQL java new dat() 后插入数据库的时间不一致,代码里new 的时间插到数据库中不一致

  6. MySQL 错误记录:Data too long for column 'xxx' at row 1

    Content 字段是 text 类型(Text是6万多)改成了 longtext 就OK了 ALTER TABLE `Article` CHANGE `Content` `Content` LONG ...

  7. CPU推理|使用英特尔 Sapphire Rapids 加速 PyTorch Transformers

    在 最近的一篇文章 中,我们介绍了代号为 Sapphire Rapids 的第四代英特尔至强 CPU 及其新的先进矩阵扩展 (AMX) 指令集.通过使用 Amazon EC2 上的 Sapphire ...

  8. CodeFormer一款既能人脸修复、还能视频去码的AI软件,附下载使用教程

    CodeFormer是一款强大的人工智能工具,主要用于图像和视频的修复和增强.它基于深度学习技术,特别是人脸复原模型,可以轻松修复和增强面部图像,提升照片和视频的质量和视觉效果 工作原理 1.通过自动 ...

  9. Web 3.0 会是互联网的下一个时代吗?

    2000 年初,只读互联网 Web 1.0 被 Web 2.0 所取代.在 Web 2.0 时代,用户摆脱了只读的困扰,可以在平台上进行互动并创作内容.而 Web 3.0 的到来,除了加密货币和区块链 ...

  10. Java基础知识整理,驼峰规则、流程控制、自增自减

    写在开头 本文接着上一篇文章续写哈.[Java基础知识整理,注释.关键字.运算符](https://blog.csdn.net/qq_43506040/article/details/13563332 ...