专业的JAVA编程教程与资源

网站首页 > java教程 正文

jvm dump 文件内存介绍+获取方式+堆内存可视分析化工具

temp10 2024-12-03 03:01:37 java教程 16 ℃ 0 评论


jvm dump 文件是什么?

JVM内存Dump是指在Java虚拟机运行时,将其内存状态(堆、栈等信息)写入到磁盘文件中的操作。

内存Dump文件通常用于故障排查、性能分析和诊断。

jvm dump 文件内存介绍+获取方式+堆内存可视分析化工具

当JVM出现崩溃、内存泄漏或严重的性能瓶颈时,生成内存Dump文件可以帮助开发人员进一步分析内存状态,找出根本原因。

内存 Dump 文件类型

JVM提供了几种常见的内存Dump文件类型:

?Heap Dump:包含JVM堆的所有对象及其状态,适用于分析内存泄漏和分析堆中对象的分布。它可以通过工具如 jhatVisualVMEclipse MAT 等来分析。

?Thread Dump:包含所有线程的堆栈跟踪信息,适用于分析死锁、线程阻塞或性能瓶颈。可以通过 jstack 命令生成。

?Core Dump:包含JVM的核心内存状态,通常用于分析JVM崩溃时的堆栈信息。

如何获得?

Heap Dump记录了JVM堆内存的详细信息,包括对象的实例、大小、引用关系、类加载信息等。

Heap Dump通常用于分析内存泄漏、对象分配情况等问题。

生成Heap Dump的方式有几种:

启动参数

?JVM启动时配置:通过启动参数来配置JVM在出现OutOfMemoryError时自动生成Heap Dump。

java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dump.hprof -jar app.jar

这会在出现内存溢出时生成Heap Dump文件。

jvm 参数解释

下面是对java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dump.hprof -jar app.jar命令中各个参数的解释,以表格形式展示:

参数

含义

-XX:+HeapDumpOnOutOfMemoryError

启用在发生OutOfMemoryError时自动生成Heap Dump文件。该参数在JVM内存溢出时非常有用,可以帮助开发者分析内存泄漏问题。

-XX:HeapDumpPath=/path/to/dump.hprof

指定Heap Dump文件的保存路径。文件的扩展名通常是.hprof,这是Heap Dump的标准格式。路径可以是绝对路径或相对路径,确保目标目录存在并具有写权限。

-jar app.jar

启动指定的Java应用程序,其中app.jar是应用程序的JAR文件。这个参数告诉JVM运行一个JAR文件,替代了普通的-cp(classpath)方式。

这些参数组合在一起,确保在OutOfMemoryError发生时,JVM会自动生成堆内存Dump,并将其保存到指定路径。

命令

通过JVM命令行工具:可以使用jmap工具手动生成Heap Dump文件:

jmap -dump:live,format=b,file=/path/to/dump.hprof <pid>

其中,<pid> 是目标JVM进程的PID,live表示只导出存活对象,format=b表示使用二进制格式,file指定文件输出路径。

如何分析?可视化工具

这些 dump 文件靠人眼看,不太现实。

下面是一些常见的分析工具,个人比较喜欢 MAT 工具。

工具

特点

适用场景

Eclipse MAT

强大的内存泄漏检测,支持Dominator树、引用链分析,报告生成

深入分析Heap Dump,找出内存泄漏和性能瓶颈。

VisualVM

集成JVM监控,支持Heap Dump分析,实时性能监控,插件扩展

实时监控和分析Java应用,适用于日常性能分析和内存分析。

JProfiler

强大的内存、CPU、线程分析,内存泄漏检测,性能瓶颈分析,商业工具

适用于复杂的Java应用,帮助深入分析内存泄漏和性能瓶颈。

YourKit

高度可定制的性能分析工具,内存、CPU、线程分析,支持Heap Dump分析,商业工具

性能优化和内存分析,适合大型和复杂的Java应用,支持实时性能监控。

jhat

轻量级工具,JDK自带,简单Web界面,适用于基本的Heap Dump分析

用于快速查看Heap Dump,适合轻量级分析,不适合复杂的内存分析需求。

小结

希望本文对你有所帮助,如果喜欢,欢迎点赞收藏转发一波。

我是老马,期待与你的下次相遇。

拓展阅读

JVM FULL GC 生产问题 I-多线程通用实现[1]

JVM FULL GC 生产问题 II-如何定位内存泄露? 线程通用实现[2]

JVM FULL GC 生产问题 III-多线程执行队列的封装实现,进一步抽象[3]

jvm-44-jvm 内存性能分析工具 Eclipse Memory Analyzer Tool (MAT) / 内存分析器 (MAT)[4]

jvm-45-jvm dump 文件内存介绍+获取方式+堆内存可视分析化工具[5]

jvm-46-jvm Thread Dump 线程的堆栈跟踪信息+获取方式+可视分析化工具 FastThread[6]

jvm-47-jvm GC 垃圾回收日志+获取方式+可视分析化工具 gcviewer[7]

jvisualvm java 性能分析工具[8]

[1] JVM FULL GC 生产问题 I-多线程通用实现: https://houbb.github.io/2018/10/08/jvm-full-gc-37-inaction
[2] JVM FULL GC 生产问题 II-如何定位内存泄露? 线程通用实现:
https://houbb.github.io/2018/10/08/jvm-full-gc-38-inaction2
[3] JVM FULL GC 生产问题 III-多线程执行队列的封装实现,进一步抽象:
https://houbb.github.io/2018/10/08/jvm-full-gc-38-inaction3
[4] jvm-44-jvm 内存性能分析工具 Eclipse Memory Analyzer Tool (MAT) / 内存分析器 (MAT):
https://houbb.github.io/2018/10/08/jvm-44-dump-file-analysis-mat
[5] jvm-45-jvm dump 文件内存介绍+获取方式+堆内存可视分析化工具:
https://houbb.github.io/2018/10/08/jvm-45-dump-file-analysis-visual
[6] jvm-46-jvm Thread Dump 线程的堆栈跟踪信息+获取方式+可视分析化工具 FastThread:
https://houbb.github.io/2018/10/08/jvm-46-dump-thread-file-analysis-visual
[7] jvm-47-jvm GC 垃圾回收日志+获取方式+可视分析化工具 gcviewer:
https://houbb.github.io/2018/10/08/jvm-47-gc-file-analysis-visual
[8] jvisualvm java 性能分析工具:
https://houbb.github.io/2018/11/12/jvisualvm

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表