dump文件分析工具有哪些_如何解析xml文件
大家好,又见面了,我是你们的朋友全栈君。
/ 前言 /
在讲解Mat工具之前我们先来看下几个关于Dump/文件的问题
Dump文件是什么
Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中
我们拿到Dump文件有什么用的?
假如JVM因为内存溢出的原因宕机了, 而程序的日志里面并没有关于溢出所在对象的信息, 此时我们就需要通过分析Dump文件来找到问题原因
Dump文件怎么生成?
第一种
在启动JVM时指定参数
# 指定生成Dump文件的异常类型
-XX:+HeapDumpOnOutOfMemoryError
# 指定Dump文件生成的位置
-XX:HeapDumpPath=/usr/local/jvm/dumps
第二种
如果你在启动JVM时没有指定参数, 那么可以使用第二种方式来生成Dump文件, 使用JVM自带的工具jmap
jmap -dump:file=/usr/local/jvm/dumps/check.dump PID
PID的获取可以通过ps
| top
指令来获取
ps -ef|grep java
top
/ 1 / 安装Mat
Mat是Eclipse的一个插件, 也可以独立运行, 所以即使你使用IDEA也可以独立使用Mat Mat官网下载地址
根据操作系统选择对应的版本即可
下载下来是一个zip
压缩包解压即可
Mac解压后是一个.app
, 直接运行会报错
我们需要修改一下启动方式或者将.app
文件移动到应用程序下
/Users/xxx/Downloads/mat.app/Contents/MacOS/MemoryAnalyzer -data ./workspace
启动后的界面
启动后在导入Dump文件时有可能会报错
An internal error occurred during: "Parsing heap dump from 'xxx.dump'".
Java heap space
这是因为Dump文件的大小超出了Mat默认的读取范围, 我们需要修改Mat的配置文件
找到MemoryAnalyzer.ini
文件
Windows/Linux中该文件就在解压缩的目录下
Mac中该文件在mat.app/Contents/Eclipse
下
-startup
../Eclipse/plugins/org.eclipse.equinox.launcher_1.5.0.v20180512-1130.jar
--launcher.library
../Eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64_1.1.700.v20180518-1200
-vmargs
-Xmx4g
-Dorg.eclipse.swt.internal.carbon.smallFonts
-XstartOnFirstThread
修改-Xmx
的值即可
/ 2 / Mat功能介绍
2 . 1 Overview
Dump文件信息, 使用饼状图的方式来展示内存占用的信息
- Details是文件信息详情, 包含了文件大小、字节码文件大小、对象文件大小、类加载器数量
- Actions是常用的操作汇总, 与左上角的菜单功能相同
2 . 2 Histogram
Histogram汇总了使用到的类的对象数量以及堆占用空间
我们还可以根据实际情况对Histogram展示的数据进行分类
在结果的第二行<Regex>
中我们可以进行模糊查询
2 . 3 Dominator_Tree
Dominator_Tree汇总了堆内存空间中占比最大的对象, 按照空间大小排序, 我们可以通点击左边的箭头符号查看当前对象的引用状况, 最右侧为当前对象所占空间比例
2 . 4 OQL
OQL是Object Query Language的简写,即对象查询语言, 语法与SQL类似, 点击上方的红色感叹号开始执行
2 . 5 Thread_Overview
线程视图, 汇总了Dump文件中所有线程的信息, 按照线程所占用的空间进行排序
2 . 6 Leak Suspects
内存泄漏疑点, 这是Mat根据Dump文件的分析结果得到最有可能导致OOM的疑点, 也是我在使用Mat工具时第一个打开的工具
点击Details查看详细分析信息
2 . 7 Path to GC Roots & Merge Shortest Paths to GC Roots
研究这俩个工具之前我们需要先了解一下GC对不同引用关系之间的区别
2 . 7 . 1 GC对不同引用关系之间的区别
- 虚引用(PhantomReference)
虚引用无法决定一个对象的生命周期, 因为持有虚引用的对象和没有引用一样, 随时都会被GC回收, 且虚引用的使用必须搭配引用队列一起使用
PhantomReference
- 弱引用(WeakReference)
与虚引用相比拥有短暂的生命周期, 长短则取决于GC什么时候回发现它, 需要搭配
WeakReference
来使用 - 软引用(SoftReference) 与弱引用相比, 软引用的生命周期长短取决于堆内存是否充足, 如果堆内存已经满了, 那么GC就会回收软引用对象
- 强引用(StrongReference) 我们平常创建对象时都是创建的强引用对象, 不论堆内存是否充足, 只要该对象还存在引用关系GC就不会回收, 这也是OOM异常的触发原因
2 . 7 . 2 Path to GC Roots
当前对象到GC Root的路径, 也就是当前对象的引用关系, 该工具只能展示单个对象的引用关系, 所以只能在Dominator_Tree
中使用
2 . 7 . 3 Merge Shortest Paths to GC Roots
一组对象到GC Root的最短路径, 效果与Path to GC Roots
相同, 可以在Histogram
中使用
选择一条数据点击右键并选择Path To GC Roots, 选择展示结果排除需引用、弱引用、软引用, 我们只需要看强引用即可
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/186570.html原文链接:https://javaforall.cn
相关文章
- 数据库文件损坏并且无备份,不用慌!DB Repair修复工具利器
- java打开dex文件_dex文件反编译工具(Dedexer)
- test.py是什么文件_exe文件反编译源码工具
- clash for windows编程辅助代理工具附文件
- 分享一个多窗口文件整理工具(Q-Dir)
- 虹科分享 | 网络流量监控 | 构建大型捕获文件(Ⅰ)——Wireshark过滤器和其他Allegro网络万用表工具
- Mac上最快捷的重复文件查找工具,Duplicate File Finder Pro for Mac 永久版自带激活
- 【C 语言】文件操作 ( 读文本文件 | 文本加密解密 | fgets 函数 | fputs 函数 )
- 【Android 逆向】GDA 逆向工具安装 ( GDA 下载 | GDA 简介 | 运行 GDA 分析 APK 文件 )
- Properties属性文件操作Java工具类详解编程语言
- XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax详解编程语言
- Linux读取XML文件的快速方法(linux读取xml文件)
- MySQL导入XML文件的步骤(mysql导入xml)
- Oracle XML工具:强大的数据分析利器(oracle的xml工具)
- 权限Linux下查看文件权限实践(查看linux文件)
- 使用Oracle工具导出脚本文件(oracle导出脚本文件)
- Linux文件自动同步:让您的信息同步更加便捷(linux文件自动同步)
- 如何使用MySQL导出XML文件?(mysql导出xml)
- “轻松掌握文件查看:Linux文件查看工具推荐”(linux文件查看工具)
- Linux上传文件的简单工具使用指南(linux 上传文件工具)
- Linux 快速回复和彻底删除文件,完美解决文件遗留问题(linux回复删除文件)
- XML文件配置Redis环境指南(xml文件配置redis)
- Mysql数据库如何处理XML文件(mysql xml文件)
- 使用MySQL处理XML文件时如何比较大小(mysql xml 大于)