摘要

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. 身未动心已远,AI带你流浪地球

    摘要:我们提供了一键运行的notebook AI作画 Dreambooth 生成自定义主体,可以在ModelArts平台上调试开发自己的文生图模型. 本文分享自华为云社区<DreamBooth+ ...

  2. 游戏“外挂”?—— AI生成游戏最强攻略

    作为一名快乐的肥宅,玩游戏是居家必备,无论是王者荣耀.吃鸡.原神这些大热游戏,还是跳一跳.合成大西瓜.2048.这些风靡一时得小游戏,咱都有涉及.但是为了成为一个"头号玩家",我总 ...

  3. ReactJS到React-Native,架构原理概述

    React是一个纯JS的UI库,只能干HTML/CSS/JS 提供的Web服务(新的H5 API不一定支持), React-Native厉害在于它能打通JS和Native Code, 让JS能够调用丰 ...

  4. 火山引擎ByteHouse:云原生数据库如何提升MySQL兼容性?

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 当前各类软件层出不穷,单独某一款软件往往难以满足企业应用需求,一般都需要与各类软件组合使用,这时软件生态兼容性就显 ...

  5. PPT 提升素材搜索能力

    https://cn.bing.com/images 高清透明 https://unsplash.com/ 更新快 https://pixabay.com/zh/ 免费高清图片 https://www ...

  6. Spring Boot Admin 授权配置

    Admin 服务端配置 添加 POM 引用 <dependency> <groupId>org.springframework.boot</groupId> < ...

  7. SpringBoot 项目实战 | 瑞吉外卖 Day04

    该系列将记录一份完整的实战项目的完成过程,该篇属于第四天 案例来自B站黑马程序员Java项目实战<瑞吉外卖>,请结合课程资料阅读以下内容 该篇我们将完成以下内容: 文件上传下载 新增菜品 ...

  8. 2D+1D | vivo官网Web 3D应用开发与实战

    一. 前言 1.1 前端工程师,不写网页,还能做什么? 在近20年的前端发展史中,前端经历了铁器时代(小前端),信息时代(大前端)以至现在的全能前端时代.经历了几个时代的沉淀之后,前端领域开始更加细分 ...

  9. OpenSCA用开源的方式做开源风险治理:Why? What? How?

    随着容器.微服务等新技术的快速迭代,开源软件已成为业界主流形态,开源和云原生时代的到来导致软件供应链越来越趋于复杂化和多样化,网络攻击者开始采用软件供应链攻击作为击破关键基础设施的的重要突破口,从而导 ...

  10. Serverless 奇点已来,下一个十年将驶向何方?

    本文整理自 QCon 上海站 2022 丁宇(叔同)的演讲内容. 以前构建应用,需要买 ECS 实例,搭建开源软件体系然后维护它,流量大了扩容,流量小了缩容,整个过程非常复杂繁琐. 用了 Server ...