导出dump文件及MAT安装分析

在java进程发生内存溢出时导出堆内存快照有如下几种方式:

1.jvm环境变量设置内存溢出自动导出

jvm参数:-Xmx32M -Xms32M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./

社区版本idea执行可能无法导出内存映射,不使用idea即可。

 

提示:真实生产环境中,此种方式可能因为内存快照太大无法导出

2.jmap命令导出

2.1 使用jmap 帮助命令,查看一下帮助:

2.2 使用命令导出:

3.额外说明

jmap可以查看堆内存的一些详细信息:如下所示

4.单独MAT分析内存dump文件

4,1 首先安装:

安装地址:Eclipse Memory Analyzer Open Source Project | The Eclipse Foundation

根据自己情况,是否捐赠。如果不想捐赠,在下载页面选择阿里的镜像,即可(最新版本不支持jdk8): 

支持jdk8的版本:

 

4.2 启动MAT:

点击如下exe文件:

需要注意的是,如果dump文件太大,需要调整它的内存才可以完成大dump文件的加载,这个配置文件需要exe启动后会自动生成:

4.3 MAT分析dump文件

这里给个程序实例:无限循环添加user。

查看概览,看到对象所占比例及排序:显然有个对象不正常,占了19m(我设置最大堆32m)

点击查看MAT详细分析结果:MAT猜想导致堆栈溢出原因

 

 

 根据上图可以看到两个猜想的原因:

1.一个对象concurrenthashmap占据了65%的堆空间;

2.class文件加载过多,占据了14%。

毫无疑问是前者这个对象占据太多的原因,怎么分析尼?

点击如下图的柱状图(红色矩形框)查看对象实例数量排序,在正则表达式可以输入自己的包名过滤一下:

这里类对象16w个,显然不正常,我们可以查下谁引用的:

 

 

以下截图矩形的指定的按钮是查看类对象数量的:

可以看到占据最多空间的对象为第一个,点看如下:

 

结合概览、猜想及这两个查看类数量、类空间占据大小基本可以定位问题。

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java VisualVM是一种用于分析Java应用程序的工具,可以使用它来分析dump文件。以下是使用Java VisualVM分析dump文件的步骤: 1. 打开Java VisualVM并选择“File”菜单中的“Load”选项。 2. 选择要分析dump文件并加载它。 3. 在左侧的“Applications”窗口中选择要分析Java应用程序。 4. 在右侧的“Monitor”窗口中选择要分析的线程或进程,并查看其性能指标和堆栈跟踪信息。 5. 使用Java VisualVM提供的其他工具和插件来进一步分析和优化Java应用程序的性能。 总之,Java VisualVM是一种非常有用的工具,可以帮助开发人员诊断和解决Java应用程序的性能问题。 ### 回答2: Java VisualVM是一个Java虚拟机监视和分析工具。它提供了实时的应用程序性能监控,以及基于某些特定平台的内存和线程分析。使用Java VisualVM可以分析非常详细的诊断信息,它可以非常轻松地获取一个Java应用程序运行时的进程快照,即dump文件。在获取到dump文件后,我们可以通过Java VisualVM对dump文件进行分析,以更深入地了解应用程序的性能状况,从而提高程序的性能。下面我们来具体说明如何使用Java VisualVM分析dump文件。 在使用Java VisualVM分析dump文件之前,首先需要下载和安装Java VisualVM。Java VisualVM提供了以下两种方式来分析dump文件: 1.打开本地应用程序 打开Java VisualVM后,从菜单栏中点击File -> Load 即可打开本地应用程序,并可以在Applications选项卡中查看正在运行的Java进程。选取需要分析的进程,然后点击Snapshot按钮,即可生成dump文件。 2.分析远程应用程序 Java VisualVM还提供了通过JMX连接到远程应用程序获取dump文件的方式。选择File -> Add JMX Connection选项,并输入连接的IP地址和端口号。成功连接后,点击Applications选项卡,选择远程应用程序,然后点击Snapshot按钮即可生成dump文件。 在得到dump文件之后,我们可以通过Java VisualVM来进行性能分析。首先我们需要打开dump文件,选择File -> Load Snapshot,选择目标dump文件。在界面的左侧,我们可以看到以下五个选项卡: 1. Overview 用于查看堆内存和线程状况的概览。 2. Monitor 用于实时监控Java应用程序的性能和资源使用情况,如CPU、内存、线程等。 3. Heap Dump 用于查看内存快照中的详细信息,帮助找出内存泄漏和对象占用情况。 4. Threads 用于查看各个线程的状态和历史记录,并对线程进行诊断和采样。 5. Samples 用于对应用程序的性能瓶颈进行采样和分析,查找性能瓶颈和优化应用程序。 通过以上选项卡,我们可以对应用程序进行更加深入的性能分析,找出应用程序的性能瓶颈,帮助我们更好地优化应用程序的性能。 ### 回答3: Java VisualVM 是 Java 官方提供的一个性能分析工具,它可以通过连接远程或本地的 JVM 进程,收集各种性能相关的数据,包括堆内存、CPU、线程、GC 等。同时,Java VisualVM 还能够生成 Heap Dump 文件,用于分析内存泄露等问题。本文主要介绍如何使用 Java VisualVM 分析 Heap Dump 文件。 一、导出 Heap Dump 文件Java VisualVM 中,我们可以在“Applications” 中找到正在运行的 Java 应用程序,右键点击应用程序进程并选择“Heap Dump”即可生成 Heap Dump 文件,存放在本地文件系统中。该文件包含了 JVM 进程的整个内存快照,用于分析内存泄露、对象引用等问题。 二、分析 Heap Dump 文件 1. 打开 Heap Dump 文件 将 Heap Dump 文件导入到 Java VisualVM 中,可以通过“File”-”Load”-”Heap Dump”来打开。 2. 了解 Heap Dump 概要信息 通过查看 Heap Dump 的概要信息,可以了解到该应用程序的总内存使用量、对象个数、堆内存各区域的使用情况等。 3. 查看对象实例 在“Classes”标签页中,我们可以查看 Heap Dump 文件中所有的类,其中包含每个对象的实例数、占用内存大小等信息。可以通过该信息找到占用内存较大的对象,进一步分析其使用情况。 4. 分析对象引用 通过“References”标签页,我们可以查看各个对象之间的引用关系。可以通过该信息找到内存泄露的对象引用,找到引用该对象的对象,或使用MAT等工具分析该对象的引用链路,定位到引用根源。 5. 分析堆内存分布 通过“Heap Dump”标签页,我们可以查看堆内存分布情况。可以查看到堆内存各区域的内存大小及使用情况,从而了解内存的占用情况。 三、结论 本文介绍了如何使用 Java VisualVM 分析 Heap Dump 文件,通过了解对象实例、对象引用、堆内存分布等信息,找到内存泄露的对象,并定位到引用根源,进一步优化应用程序,提高其性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值