`
gelongmei
  • 浏览: 209575 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

JAVA内存DUMP

 
阅读更多
http://blog.csdn.net/caihaijiang/article/details/7745251

Java的内存泄露多半是因为对象被遗留在全局的HashMap中得不到释放,如果发现Java应用程序占用的内存出现了泄露的迹象,那么我们一般采用下面的步骤分析:

    1. 把Java应用程序使用的heap dump下来
    2. 使用Java heap分析工具(如MAT),找出内存占用超出预期的嫌疑对象
    3. 根据情况,分析嫌疑对象和其他对象的引用关系。
    4. 分析程序的源代码,找出嫌疑对象数量过多的原因。

生成heap dump文件的方法:

方法一:使用jdk的jmap命令,在运行中的JVM生成Dump文件
    jmap  -dump:format=b,file=/home/jetty/logs/heap.bin 进程ID

    如果只dump heap中的存活对象,则加上选项-live,如下:

     jmap  -dump:live,format=b,file=/home/jetty/logs/heap.bin 进程ID

方法二:让JVM在遇到OutOfMemoryError时生成Dump文件
     -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path


用MAT(Memory Analyzer)分析dump文件:

在eclipse中安装MAT插件(http://www.eclipse.org/mat/),然后在eclipse中,file---->open,打开这个文件heap.bin,如下图:


从上图可以看到它提供的一些功能:
     1) Histogram可以查看内存中的对象,对象的个数以及大小。
     2.)Dominator Tree可以列出线程,以及线程下面的那些对象占用的空间。
     3)Top consumers通过图形列出最大的object。
     4)Leak Suspects通过MA自动分析泄漏的原因。
点击Histogram链接,如下:



(注:在一个正常业务系统中,char[] 占用70-90%的是非常正常的。)
上图中,共有4列:

     Class Name:列出的是类名

     Objects:类的对象的数量

     Shallow Heap:对象本身占用内存的大小,不包含对其他对象的引用,也就是对象头加成员变量(不是成员变量的值)的总和

     Retained Heap:是该对象自己的shallow size,加上从该对象能直接或间接访问到对象的shallow size之和。换句话说,retained size是该对象被GC之后所能回收到内存的总和。
分享到:
评论

相关推荐

    java 内存dump分析和thread dump(java core)分析

    Java内存dump分析和Thread Dump(Java Core)是Java性能调优中的重要环节,它们能帮助开发者定位和解决系统中的各种问题,如内存泄漏、线程阻塞等。下面将详细介绍这两个概念及其分析工具。 首先,Java堆内存dump,...

    JAVA jvm DUMP 内存分析

    性能测试,线程的 dump 看到线程的 死锁,等待 运行状态

    Java thread dump analyzer (tda)

    Java线程分析工具(TDA)是一款专为Java开发者设计的强大工具,用于解析和理解Java应用程序的线程转储(thread dump)。线程转储是Java虚拟机(JVM)在特定时刻生成的一种快照,其中包含了应用程序中所有活动线程的状态...

    javacore和dump分析工具

    javacore.txt文件用jca打开,heapdump.phd文件用ha打开。 Heap dump 文件是一个二进制文件,它保存了某一时刻在 Java 堆中所有对象的状态。这个文件最重要的作用就是分析 Java 堆内存泄露问题,heap analyzer,MAT ...

    java内存dump文件分析软件,MemoryAnalyzer1.8.0

    jvm的dump文件分析工具,32与64位,两个版本,欢迎大家一起学习jvm内存分析

    JavaDump分析

    JavaDump是Java虚拟机在运行时的快照,记录了Java虚拟机的状态和信息,并将其保存到一个文件中。这个文件可以用于后续的分析,以帮助开发者理解程序的运行状况,特别是当程序出现故障或者性能问题时。 JavaDump文件...

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

    Java内存管理是开发Java应用程序时的关键环节,内存泄露和溢出问题可能导致系统性能下降,甚至导致服务崩溃。本文将深入探讨如何检测和分析Java内存泄露与溢出,并介绍一种常用的工具——Memory Analyzer(MAT)。 ...

    java 内存溢出分析工具 HeapAnalyzer

    Java内存溢出(Out of Memory,OOM)是Java应用程序中常见的问题,会导致程序崩溃或性能急剧下降。HeapAnalyzer是一款强大的工具,专为分析Java应用程序的内存状况,特别是针对内存溢出问题进行诊断。本文将详细介绍...

    java dump堆栈分析工具

    java dump 堆栈 dumpAnalyzer 分析,在日常工作中,经常会遇到,系统跑着跑着就会出现性能问题,CPU居高不下。这个时候我们就需要对系统的堆栈信息进行分析。这里就介绍如何使用IBM内存检测工具(dumpAnalyzer)。

    IBM java heapdump analyzer

    IBM最新java heapdump分析工具 java -jar ha.jar -Xmx4096m ha.jar

    javacore\heapdump文件分析工具

    而`heapdump`文件则是JVM在运行过程中,通过Java的`jmap`命令或者`VisualVM`等工具手动触发生成的,它记录了JVM堆内存的详细状态,包括对象实例、类加载器、垃圾收集信息等。`ha`(Heap Analysis)工具则用于分析`...

    java dump分析工具ha456

    本文将详细探讨Java内存分析、dump分析、jmap和jstack工具的使用,以及如何利用这些工具进行堆栈分析。 首先,Java内存分析主要关注的是程序运行时的内存分配和管理。Java内存分为堆内存(Heap)、栈内存(Stack)...

    JAVA内存分析 - V1.0.0.zip

    Java内存分析是Java开发中非常重要的一个环节,它关乎到应用程序的性能和稳定性。"JAVA内存分析 - V1.0.0.zip" 提供了一套工具来帮助开发者深入理解并优化Java应用程序的内存使用情况。这个压缩包包含了两个关键文件...

    java内存分析-内存泄露问题.rar

    Java内存分析是一个重要的主题,尤其是在开发复杂且性能要求高的应用程序时。内存泄露是Java程序员需要密切关注的问题,因为它们可能导致系统性能下降,甚至可能导致系统崩溃。本文将深入探讨Java内存分析和内存泄露...

    java线上故障分析-线程dump,堆内存分析

    ### Java线上故障分析:线程dump与堆内存分析 #### 引言 在现代软件开发中,Java作为一门广泛使用的编程语言,在企业级应用、Web服务、大数据处理等多个领域发挥着重要作用。然而,随着系统复杂度的提升,线上环境...

    Java线程Dump分析工具jstack解析及使用场景

    Java线程Dump分析工具jstack是Java开发人员和运维人员常用的诊断工具,它能够帮助我们了解Java应用程序中线程的状态,以及线程的执行轨迹。本文将深入解析jstack的使用方法及其在不同场景下的应用。 jstack命令的...

    java内存分析工具dumpAnalyzer

    Java内存分析是优化应用程序性能的关键环节,特别是在处理大型或资源密集型应用时。"dumpAnalyzer"是一个专门用于此目的的工具,它提供了图形化的界面,帮助开发者深入理解系统的内存状况,找出潜在的性能瓶颈。本文...

    JavaCore和HeapDump分析工具

    JavaCore和HeapDump是两种重要的Java应用程序诊断工具,它们用于理解和优化Java应用程序的性能和内存使用情况。在Java运行环境中,遇到性能问题或者内存泄漏时,开发者通常会借助这类工具来定位问题。 JavaCore,也...

    JAVA内存泄漏分析工具

    Java内存泄漏分析是一个关键的系统优化任务,尤其是在大型企业级应用中,长期运行的系统可能会因为内存泄漏导致性能下降甚至服务中断。"JAVA内存泄漏分析工具"正是一款用于解决此类问题的专业工具,它能帮助开发者...

Global site tag (gtag.js) - Google Analytics