Linux无头模式使用mat分析dump的方法
摘要
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的方法的更多相关文章
- Linux字符模式下如何设置/删除环境变量
Linux字符模式下设置/删除环境变量方法: bash下 设置:export 变量名=变量值 删除:unset 变量名 csh下 设置:setenv 变量名 变量值 删除:unsetenv 变量名 h ...
- 使用MAT(Memory Analyzer Tool)工具分析dump文件--转
原文地址:http://gao-xianglong.iteye.com/blog/2173140?utm_source=tuicool&utm_medium=referral 前言 生产环境中 ...
- 【转载】linux环境下tcpdump源代码分析
linux环境下tcpdump源代码分析 原文时间 2013-10-11 13:13:02 CSDN博客 原文链接 http://blog.csdn.net/han_dawei/article/d ...
- linux环境下tcpdump源代码分析
Linux 环境下tcpdump 源代码分析 韩大卫@吉林师范大学 tcpdump.c 是tcpdump 工具的main.c, 本文旨对tcpdump的框架有简单了解,只展示linux平台使用的一部分 ...
- 使用MAT分析内存泄露
使用MAT分析内存泄露 对于大型服务端应用程序来说,有些内存泄露问题很难在测试阶段发现,此时就需要分析JVM Heap Dump文件来找出问题.随着单机内存越来越大,应用heap也开得越来越大,动辄十 ...
- 在Eclipse中使用MAT分析Android程序内存使用状况(转)
对于Android这种手持设备来说,通常不会带有太大的内存,而且一般用户都是长时间不重启手机,所以编写程序的时候必须要非常小心的使用内存,尽量避免有内存泄露的问题出现.通常分析程序中潜在内存泄露的问题 ...
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
转载自:http://www.blogjava.net/rosen/archive/2010/06/13/323522.html 前言的前言 写blog就是好,在大前提下可以想说什么写什么,不像投稿那 ...
- 使用Memory Analyzer tool(MAT)分析内存泄漏
前言的前言 写blog就是好,在大前提下可以想说什么写什么,不像投稿那么字字斟酌.上周末回了趟成都办事,所以本文来迟了.K117从达州经由达成线往成都方向走的时候,发现铁路边有条河,尽管我现在也不知道 ...
- Linux信号(signal) 机制分析
Linux信号(signal) 机制分析 [摘要]本文分析了Linux内核对于信号的实现机制和应用层的相关处理.首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理.接着分析了内核 ...
- linux内核SPI总线驱动分析(一)(转)
linux内核SPI总线驱动分析(一)(转) 下面有两个大的模块: 一个是SPI总线驱动的分析 (研究了具体实现的过程) 另一个是SPI总线驱动的编写(不用研究具体的实现过程) ...
随机推荐
- Python图像处理丨基于K-Means聚类的图像区域分割
摘要:本篇文章主要讲解基于理论的图像分割方法,通过K-Means聚类算法实现图像分割或颜色分层处理. 本文分享自华为云社区<[Python图像处理] 十九.图像分割之基于K-Means聚类的区域 ...
- 火山引擎 DataLeap 套件下构建数据目录(Data Catalog)系统的实践
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 摘要 Data Catalog 产品,通过汇总技术和业务元数据,解决大数据生产者组织梳理数据.数据消费者找数和理解 ...
- Jenkins 多分支流水线(SVN)
实际应用过程中,一般多分支流水线的方式用得比较多一些, master 对应 生成环境 develop 对应 测试环境, 将不同分支的代码构建到不同的环境中 添加 Jenkinsfile 文件 Jenk ...
- 32. 干货系列从零用Rust编写正反向代理,关于堆和栈以及如何解决stack overflow
wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,四层TCP/UDP转发,七层负载均衡,内网穿透,后续将实现websocket代 ...
- 最火前端Web组态软件(可视化)
友情提示:本文为原创文章,转载请注明出处,商务合作请私信!!! 前言: 随着物联网.大数据等技术高速发展,我们逐步向数字化.可视化的人工智能(AI)时代的方向不断迈进.智能时代是工业 4.0 时代 ...
- Spark Final-Examination Note
重点 4567,Special 4,5 3道编程题,分值 35(基本书上,不超纲) 选填各 20分,简答 5 题/25分,编程题 3题/35分. 简答题参考每章课后习题 第 1 章简答题 1. 请阐述 ...
- Linux Page Cache调优在Kafka中的应用
本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/MaeXn-kmgLUah78brglFkg作者:Yang Yijun 本文主要描述Linux ...
- SpringBoot-mybatisplus-模糊查询
模糊查询如何实现如下案例中两种实现方法 第一种:利用QueryWrapper.like自己实现. 第二种:使用@TableField(condition = SqlCondition.LIKE)实现. ...
- myeclipse过期问题
安装myeclipse后就会遇到过期问题.如下代码永久解决过期问题. import java.io.BufferedReader; import java.io.IOException; import ...
- uni-app打包h5页面ios唤起软键盘踩坑
问题:页面有很多input框,上面的input输入框,当虚拟键盘出来时没问题,但是下面的input输入框,就会出现问题,input输入框会跑到键盘后面. 网上一阵百度,找到原因:安卓手机中唤起软键盘时 ...