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

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
分享到:
评论

相关推荐

    memoryAnalyzer,jemter,jvisualvm工具使用介绍

    memoryAnalyzer可以分析Java进程内存情况,比如每个对象占用内存情况,对象个数,占用百分比,可依此分析后定位到代码哪里不合理; jemter用作压力测试,就是测试系统能够支撑的并发数 jvisualvm是jdk自带工具,...

    MemoryAnalyzer-1.10.0.20200225-win32.win32.x86_64.zip

    一款开源的jvm内存分析工具,也是《深入理解java虚拟机》一书中使用的工具,作用与官方的visualvm类似但要更优秀

    Visualvm插件TDA(thread dump分析)

    https://java.net/projects/tda/downloads/directory/visualvm 官方下载的,附带使用方法,Visualvm的TDA插件,能很好的分析线程Dump日志,吐血推荐!

    JVisualVM简介与内存泄漏实战分析

    JVisualVM简介与内存泄漏实战分析,如何分析内存溢出,定位内存溢出问题

    visualvm 中文版

    可以使用VisualVM生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、 执行内存和CPU分析,同时它还支持在MBeans上进行浏览和操作。

    visualvm 216版本

    开发人员可以利用它来监控、分析线程信息,浏览内存堆数据。系统管理员可以利用它来监测、控制 Java 应用程序横跨整个网络的情况。Java 应用程序使用人员可以利用它来创建包含所有必要信息的 Bug 报告。

    Java内存监控工具Java VisualVM

    Java内存监控工具Java VisualVM

    visualvm143.zip

    visualvm143.zip

    VisualVM 2.1.5 (visualvm-215.zip)

    VisualVM 2.1.5 (visualvm_215.zip)是一个集成了命令行 JDK 工具和轻量级分析功能的可视化工具。 专为开发和生产时间使用而设计。

    Java程序性能分析工具 VisualVM_202.zip

    开发人员可以利用它来监控、分析线程信息,浏览内存堆数据。系统管理员可以利用它来监测、控制Java应用程序横跨整个网络的情况。Java应用程序使用人员可以利用它来创建包含所有必要信息的Bug 报告。

    VisualVM_142 For Mac

    VisualVM 142 For Mac,亲测好用 VisualVM 是一个工具,它提供了一个可视界面,用于查看 Java 虚拟机 (Java ...此外,还可以捕获有关 JVM 软件实例的数据,并将该数据保存到本地系统,以供后期查看或与其他用户共享

    visualvm_14.zip

    性能分析神器VisualVM VisualVM 是一款免费的,集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优。

    visualvm中文版

    visualvm,java jvm监控工具,可远程调试程序,idea下载-visualvm-launcher插件容易使用

    visualvm_工具

    visualvm java 内存查看工具,解压,进入bin目录,运行就OK。

    visualvm_144.zip

    visualvm_144.zip 官网 最新版的Java visualvm 性能监控

    visualVM_131

    可以使用VisualVM生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和CPU分析,同时它还支持在MBeans上进行浏览和操作。尽管VisualVM自身要在JDK6这个版本上运行,但是JDK1.4以上版本的程序它都能监控。

    JavaVisualVM可视化多线程监控分析工具v1.3.8官方安装版

    功能包括内存分析、快照功能、转储功能、CPU分析等等,系统管理员可以利用它来监测、控制Java应用程序横跨整个网络的情况。 它集成了多个JDK命令工具的一个可视化工具,它主要用来监控JVM的运行情况,

    VisualVM官网1.4.1下载

    VisualVM is a visual tool integrating commandline JDK tools and lightweight profiling capabilities. Designed for both development and production time use.

    VisualVM简介

    VisualVM简介

Global site tag (gtag.js) - Google Analytics