`
Donald_Draper
  • 浏览: 972131 次
社区版块
存档分类
最新评论

VIsualVM与MemoryAnalyzer分析堆内存过程

    博客分类:
  • JAVA
阅读更多
背景:有个一数据库记录增量更新线程,运行过程中,吃内存较大,打算用Java VIsualVM与MemoryAnalyzer分析一下原因。

首先启动服务器,用Java VIsualVM监视JVM进程界面如下:



启动增量更新线程

在吃掉1.3G左右内存的时候Dump堆内存,快照如下:





从上面可以看出主要是Oracle读取记录所有消耗的内存较多;

打开byte[]的实例数,查看引用:



从引用看,可以看出byte[]的引用主要是HashMap$Entry

将堆快照另存为heapdump.hprof

再用MemoryAnalyzer分析,首先用打开堆快照文件heapdump.hprof,在这个之前,要保证,MemoryAnalyzer的最大内存要大于,堆快照内存,可以通过修改MemoryAnalyzer的配置文件
MemoryAnalyzer.ini
我的如下:
-startup
plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.300.v20150602-1417
-vmargs
-Xmx2560m
由于我的堆快照的内存有1.3G,所以设置的最大内存为2.5G

MemoryAnalyzer分析完后主界面如下:



我们需要关注的是实例柱状图,内存泄漏报告和大对象

Leak Suspects: includes leak suspects and a system overview




The thread org.apache.tomcat.util.threads.TaskThread @ 0x791e33e50 http-apr-8080-exec-8 keeps local variables with total size 992,879,152 (95.20%) bytes.
The memory is accumulated in one instance of "java.util.Hashtable$Entry[]" loaded by "<system class loader>".
The stacktrace of this Thread is available. See stacktrace.

Keywords
java.util.Hashtable$Entry[]

从上面描述,内存主要被java.util.Hashtable$Entry[]实例所以占


Histogram: Lists number of instances per class




从Histogram来看,主要是Oracle数据占用内存

Dominator Tree: List the biggest objects and what they keep alive.




从上面来看Dominator Tree,主要是Oracle连接线程中的Hashtable$Entry的实例占用着内存;

线程实例图:



总结:
从上面的分析来看主要是Hashtable$Entry的实例占用着内存,这是由于我们把查询出来到的数据库记录放在了HashMap中导致的内存飙升,优化分页查询更新,去除不必要的HashMap对象的引用。




  • 大小: 71.7 KB
  • 大小: 38.6 KB
  • 大小: 91 KB
  • 大小: 62.1 KB
  • 大小: 77.7 KB
  • 大小: 58.5 KB
  • 大小: 73.2 KB
  • 大小: 73.7 KB
1
0
分享到:
评论

相关推荐

    堆dump分析工具Eclipse Memory Analyzer

    MAT通过深入分析堆内存中的对象实例、引用关系以及类的加载情况,为用户提供清晰的报告和建议,从而有效地优化内存管理。 1. **MAT的主要功能**: - **内存泄漏检测**:MAT能够识别出可能导致内存泄漏的对象,通过...

    memory analyzer 内存泄露

    MemoryAnalyzer,通常简称为MAT,是由Eclipse基金会开发的一款强大的Java堆内存分析工具。它能帮助开发者定位并解决Java应用程序中的内存泄露问题。MAT通过分析heap dump文件(即Java虚拟机的堆内存快照),提供详尽...

    MemoryAnalyzer-1.13.0.20220615-win32.win32.x86_64.zip

    《深入解析MemoryAnalyzer:JVM内存分析利器》 MemoryAnalyzer,简称MAT,是Eclipse基金会推出的一款强大的内存分析工具,其版本号为1.13.0.20220615-win32.win32.x86_64,专为Windows操作系统设计,支持32位和64位...

    MemoryAnalyzer-1.8.1.x86_64.7z

    Memory Analyzer(MAT)是IBM推出的一款强大的Java堆内存分析工具,它以其高效的性能和详尽的内存泄漏检测功能,成为了Java开发者不可或缺的诊断利器。本文将详细介绍MAT 1.8.1版本,这个独立工具,而非集成在...

    MemoryAnalyzer-1.12.0.20210602-linux.gtk.x86_64.zip

    6. **碎片分析**:MAT可以分析堆内存的碎片化程度,提供优化内存分配的建议,以提高系统性能。 7. **报告导出**:MAT的结果可以导出为CSV、XML或HTML格式,方便共享和进一步分析。 8. **兼容性**:MAT不仅支持IBM...

    MemoryAnalyzer-1.9.1.20190826-win32.win32.x86_64.zip

    此外,MAT还支持与其他工具的集成,例如与JProfiler、VisualVM等结合,形成更完整的性能分析解决方案。 在实际使用中,MAT工具的效率和准确性赢得了广大开发者的认可。但需要注意的是,内存分析是一个复杂的过程,...

    MemoryAnalyzer-1.0.1.20100809-win32.win32.x86.zip

    MemoryAnalyzer,简称MAT,由Eclipse基金会开发,是一款开源的Java堆内存分析工具。它的主要作用是对Java应用程序的内存使用情况进行深入分析,帮助开发者发现和解决内存泄漏、过度对象创建等问题,从而提高应用程序...

    java 内存溢出分析工具 HeapAnalyzer

    HeapAnalyzer是一款Java内存分析工具,由IBM开发,它可以帮助开发者检查和分析Java堆内存的状态,找出可能存在的内存泄漏或者过度占用内存的对象。通过分析heap dump文件,HeapAnalyzer可以展示对象的分布情况,识别...

    MemoryAnalyzer独立版

    《深入理解Java OOM分析与MemoryAnalyzer工具》 在Java编程中,内存管理是至关重要的一个环节,不当的内存使用可能导致程序性能下降,甚至出现“OutOfMemoryError”(简称OOM)异常,严重影响服务的稳定性和可靠性...

    MemoryAnalyzer-1.4_x86 MAT

    MAT,全称为Memory Analyzer Tool,是由IBM开发并开源的一款专业级Java堆内存分析器。这个工具的主要目标是对Java堆转储(Heap Dump)文件进行深入分析,找出内存泄漏的根源,优化内存使用,从而提高应用的运行效率...

    OOM分析工具-MemoryAnalyzer.zip

    今天我们将介绍的主角便是Java OOM分析的得力助手——Memory Analyzer Tool(MAT),它是一个强大的内存分析工具,特别适合于分析JVM的dump日志。 MAT是由Eclipse基金会开发的一款免费开源工具,主要用于分析Java堆...

    JAVA内存分析 - V1.0.0.zip

    6. **碎片分析**:MAT还能分析堆内存的碎片化情况,这对于优化内存分配和垃圾收集策略很有帮助。 7. **比较堆转储**:对比两次不同的heap dump,可以发现内存消耗的变化,有助于追踪内存泄漏的发生过程。 通过...

    优化Java堆内存大小的五个技巧

    1. **理解默认值与自定义配置**:每个JVM都有默认的堆内存大小,但这个默认值可能并不适合所有应用。你可以通过JVM启动参数-Xms和-Xmx来分别设置初始堆内存和最大堆内存。例如,`-Xms256m -Xmx1024m`将初始堆设置为...

    Java 内存分析工具

    MAT(Memory Analyzer Tool)是由Eclipse基金会提供的一个强大的Java内存分析工具。它能对heap dump文件进行深入分析,找出可能存在的内存泄漏问题。MAT提供了多种视图和功能,如对象树、支配树、散列映射等,帮助...

    jvm内存分析工具mat安装包

    然后,解压下载的MemoryAnalyzer-1.10.0.20200225.zip文件,运行其中的MAT可执行文件,导入堆转储文件进行分析。 在分析过程中,MAT会计算每个对象的浅堆(Shallow Heap)和保留堆(Retained Heap),前者表示对象...

    java内存泄露定位与分析[整理].pdf

    - **内存分析工具**:例如VisualVM、MAT(Memory Analyzer Tool)、JProfiler等,可以帮助开发者分析堆转储文件,查找长期存在的对象及其引用链。 - **代码审查**:检查是否有未关闭的流、数据库连接、线程池、静态...

    java内存泄露、溢出检查方法和工具

    长期的内存泄露会导致Java虚拟机(JVM)的堆内存耗尽,引发OutOfMemoryError。 检查Java内存泄露的方法主要包括以下几个步骤: 1. **生成堆转储文件**:在Linux环境中,可以使用JVM提供的`jmap`命令生成堆转储文件...

    jvm内存分析工具mat

    MAT通过解析JVM生成的hprof文件(内存快照),可以深入分析堆内存的各个部分,包括对象分配、存活状态、引用关系等,帮助定位问题所在。 MAT的主要功能包括: 1. **对象概览**:提供一个整体的内存分配情况,展示...

    Heap Dump的IBM分析工具.zip

    IBM提供了强大的内存分析工具,例如VisualVM和MAT (Memory Analyzer Tool),它们能有效地解析heap dump文件,展示内存分配、对象存活状态、类装载信息等关键数据。这些工具不仅支持对IBM J9 JVM产生的heap dump,也...

    mat工具,可以分析hprof文件

    MAT(Memory Analyzer Tool)是Eclipse基金会开发的一款强大的Java堆内存分析工具,专门用于诊断Java应用程序的内存问题,如内存泄漏、内存占用过高以及对象生命周期管理等。标题中提到的"mat工具,可以分析hprof...

Global site tag (gtag.js) - Google Analytics