`

java程序性能分析之thread dump和heap dump

阅读更多

一.dump基本概念

        在故障定位(尤其是out of memory)和性能分析的时候,经常会用到一些文件来帮助我们排除代码问题。这些文件记录了JVM运行期间的内存占用、线程执行等情况,这就是我们常说的dump文件。常用的有heap dump和thread dump(也叫javacore,或java dump)。我们可以这么理解:heap dump记录内存信息的,thread dump是记录CPU信息的。

        heap dump:

        heap dump文件是一个二进制文件,它保存了某一时刻JVM堆中对象使用情况。HeapDump文件是指定时刻的Java堆栈的快照,是一种镜像文件。Heap Analyzer工具通过分析HeapDump文件,哪些对象占用了太多的堆栈空间,来发现导致内存泄露或者可能引起内存泄露的对象。

        thread dump:

        thread dump文件主要保存的是java应用中各线程在某一时刻的运行的位置,即执行到哪一个类的哪一个方法哪一个行上。thread dump是一个文本文件,打开后可以看到每一个线程的执行栈,以stacktrace的方式显示。通过对thread dump的分析可以得到应用是否“卡”在某一点上,即在某一点运行的时间太长,如数据库查询,长期得不到响应,最终导致系统崩溃。单个的thread dump文件一般来说是没有什么用处的,因为它只是记录了某一个绝对时间点的情况。比较有用的是,线程在一个时间段内的执行情况。

两个thread dump文件在分析时特别有效,困为它可以看出在先后两个时间点上,线程执行的位置,如果发现先后两组数据中同一线程都执行在同一位置,则说明此处可能有问题,因为程序运行是极快的,如果两次均在某一点上,说明这一点的耗时是很大的。通过对这两个文件进行分析,查出原因,进而解决问题。

 

二.利用JDK自带的工具获取thread dump文件和heap dump文件

        使用的JDK工具在JDK_HOME/bin/目录下,使用到jmap和jstack这两个命令。

1.获取heap dump文件

        windows下切换到JDK_HOME/bin/,执行以下命令:jmap -dump:format=b,file=heap.hprof 2576 

        linux下切换到JDK_HOME/bin/,执行以下命令:./jmap -dump:format=b,file=heap.hprof 2576

        这样就会在当前目录下生成heap.hprof文件,这就是heap dump文件。

2.获取thread dump文件

        windows下执行:jstack 2576 > thread.txt

        linux下执行:./jstack 2576 > thread.txt

        windows/linux则会将命令执行结果转储到thread.txt,这就是thread dump文件。有了dump文件后,我们就能借助性能分析工具获取dump文件中的信息。

3.如果我们只需要将dump中存活的对象导出,那么可以使用:live参数

jmap -dump:live,format=b,file=heapLive.hprof 2576   

        执行完后,我们在当前目录C:\Java\jdk1.6.0_27\bin下看到刚生成的三个文件,如下所示:


        说明:如上实例的2576是我当前需要分析的java进程PID,关于Windows下如何获得指定的JAVA时空程PID可参考:http://bijian1013.iteye.com/blog/2221238

 

三.使用工具分析java heap dump文件

        现在我们使用一些图形化工具,来帮助我们分析文件中的信息,有效地定位问题。

1.使用JDK自带的jhat命令

        jhat是用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言。

jhat -port 5000 heap.hrof

        当服务启动完成后,我们就可以在浏览器中,通过http://localhost:5000/进行访问,如下所示:


2.使用eclipse MAT工具

        一般来说,应用程序的dump文件都是很大的,jdk自带命令难以分析这些大文件。在实际的生产环境下,我们必须要借助第三方工具,才能快速打开这些大文件,进行分析定位。eclipse memory analyzer是一款优秀的heap分析工具,能够帮我们快速定位内存泄露问题。

  • 大小: 17.4 KB
  • 大小: 61.6 KB
  • 大小: 15.7 KB
  • 大小: 27 KB
分享到:
评论

相关推荐

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

    包括 堆内存dump分析工具和thread dump(java core)的分析工具 还包括两篇关于dump分析的文档,分析java系统内存泄露死循环等非常需要啊有木有

    java性能分析 jmap jstack

    java程序性能分析thread dump和heap dump,dump文件:在故障定位(尤其是out of memory)和性能分析的时候,dump文件记录了JVM运行期间的内存占用、线程执行等情况。 heap dump:记录某一时刻JVM堆中对象使用情况,哪些...

    Java Thread Dump Analyzing

    Java Thread Dump Analyzing

    IBM heapdump analyzer

    在一些平台上,在有些情况下,javacore也被称为javadump,它包含jvm和应用程序相关的在特定时刻的一些诊断信息,如操作系统,应用程序环境,线程,native stack本地堆,锁,和内存的信息。在生成heapdump文件的时候...

    JVM Dump与Java对象的内存布局

    介绍了heap dump和thread dump,以及详细介绍dump工具Memory Analyzer的使用,最后讲解了Java对象的内存布局。

    JStack和Java Thread Dumps分析

    JStack和Java Thread Dumps分析

    java排障工具

    java排障工具集,包括pstools、分析heapDump和分析ThreadDump

    IBM日志分析工具

    gc日志分析工具/heapDump日志分析工具/javaCore日志分析工具

    java-buildpack-diagnostics-app:用于获取诊断信息(如线程转储、堆转储和内存信息)的 Java Web App

    支持 heapdump、threaddump 和内存信息。 堆转储被上传到 Amazon S3。 此应用程序还捆绑了用于通过 ssh 命令行访问部署容器。 支持使用 Tomcat 作为部署容器的 java-buildpack 应用程序。 此应用程序旨在添加到 ...

    Java-JVM性能监控与故障处理工具详细介绍以及使用案例

    这里说的数据包括:运行日志、异常堆栈、GC日志、线程快照文件(threaddump/javacore文件)、堆转储快照(heapdump/hprof文件)等。使用JVM命令和一查看这个JVM参数,帮助我们排查、解决问题。 1 JDK的命令行工具 ...

    Oracle WebLogic Server 10gR3: Troubleshooting Methodologies

    Review of General Memory Concepts: Java Heap, Native Memory, and Memory Leaks Investigating Java Heap Out of Memory Errors Review Garbage Collection and Object References Symptoms, Causes, and ...

    kiwi_java_toolbox

    功能说明一键式收集Java进程的问题定位信息,包括:Thread Stack和Heap Dump等。监控Java进程使用的CPU,当占用率过高时,自动收集Top信息和Thread Stack。启动、停止、查询、导出飞行记录。使用方法将工具上传到...

    visualvm 工具

    VisualVM可以做的:监控应用程序的性能和内存占用情况、监控应用程序的线程、进行线程转储(Thread Dump)或堆转储(Heap Dump)、跟踪内存泄漏、监控垃圾回收器、执行内存和CPU分析,保存快照以便脱机分析应用程序;...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    java堆(Java Heap) 51 方法区 51 【JVM】JVM内存结构,GC垃圾收集解析 52 【JVM】双亲委派模型中,从顶层到底层,都是哪些类加载器,分别加载哪些类? 55 【JVM】能不能自己写个类叫java.lang.System? 57 【JVM】...

    jca-ha.zip

    该资源包含了两部分内容,jca和ha。jca是java线程堆栈分析工具,此压缩包包含的版本是jca396.jar,ha是java内存使用情况分析工具,此压缩包包含的版本是ha405.jar

    codepot-dumps

    jcmd <PID> GC.heap_dump <PATH>-堆转储到指定文件 jcmd <PID> Thread.print-线程转储 jcmd 帮助-可用命令列表 jmap -histo-直方图 jmap -dump:活动,文件= <PATH> <PID>-堆转储 ps -eLf-具有其线程的进程列表 kill...

    Microsoft Codeview and Utilities User's Guide

    19.12 The HEAPSIZE Statement 19.13 The PROTMODE Statement 19.14 The OLD Statement 19.15 The REALMODE Statement 19.16 The EXETYPE Statement Chapter 20 Creating Dual-Mode Programs with BIND 20.1 ...

    Debugging with GDB --2007年

    5.4 Stopping and starting multi-thread programs . . . . . . . . . . . . . 6 Examining the Stack . . . . . . . . . . . . . . . . . . . . . . 51 6.1 6.2 6.3 6.4 6.5 6.6 7 Stack frames . . . . . . . . . ...

    C标准库源代码(学习C/C++必备)

    C标准库源代码\HEAPDUMP.C C 标准库源代码\HEAPGROW.C C标准库源代码\HEAPHOOK.C C标准库源代码\HEAPINIT.C C标准库源代码\HEAPMIN.C C标准库源代码\HEAPPRM.C C标准库源代码\HEAPSRCH.C C标准库源代码\HEAPUSED.C C...

Global site tag (gtag.js) - Google Analytics