`

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)分析

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

    Heap Dump的IBM分析工具.zip

    理解并熟练运用heap dump分析工具是Java开发者必备的技能之一,这有助于提高应用程序的性能和稳定性。通过IBM的工具,我们可以深入理解JVM内存的工作原理,及时发现并修复内存问题,从而优化应用程序的运行效率。

    javacore\heapdump文件分析工具

    总结来说,`javacore`和`heapdump`分析是Java性能优化的关键环节,`ha`和`jca`工具为开发者提供了强大的诊断能力。正确理解和使用这些工具,可以有效地解决Websphere环境下的各种性能问题,提高系统的稳定性和效率。

    用Java thread dump 去分析程序的问题

    Java线程转储(Thread Dump)是诊断Java应用程序性能问题和异常情况的重要工具。它提供了一个运行中的Java应用中所有线程的快照,详细显示每个线程的状态、堆栈跟踪以及线程名称。线程状态包括RUNNABLE、BLOCKED、...

    利用wsadmin生成javacore,heapdump文件

    在IT领域,尤其是在Java应用程序的性能调优过程中,生成javacore和heapdump文件是非常重要的步骤。这些文件能帮助我们诊断应用程序的内存泄漏、性能瓶颈等问题。本篇将详细讲解如何利用wsadmin工具来生成这两种文件...

    Java Thread Dump Analyzing

    Java Thread Dump Analyzing

    java故障排查ThreadDump

    Java线程 Dump(Thread Dump)是Java应用程序在特定时间点的线程状态快照,它包含每个线程的详细信息,如线程ID...Thread Dump是Java故障排查的重要工具,熟练掌握其分析方法对于提升Java应用的稳定性和性能至关重要。

    Java Core-HeapDump文件及其分析方法.docx

    "Java Core-HeapDump 文件及其分析方法" Java Core-HeapDump ...Java Core-HeapDump 文件及其分析方法是 Java 应用程序开发和维护中非常重要的一部分,能够帮助开发者快速地解决问题,提高应用程序的性能和可靠性。

    IBM heapdump analyzer

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

    java错误处理:java.lang.OutOfMemoryError: Java heap space

    - 分析堆转储文件(heap dump),找出占用内存较大的对象集合。 **注意事项:** - 调整JVM参数时需谨慎,过大的堆可能会导致其他问题,如GC停顿时间增加。 - 应用程序设计时应考虑到资源的有效利用,避免无谓的内存...

    java内存分析工具dumpAnalyzer

    总的来说,dumpAnalyzer是Java开发者的重要工具,它能帮助我们有效地管理和优化应用的内存使用,提升系统的稳定性和性能。通过深入理解和熟练运用这个工具,我们可以更有效地诊断和修复内存相关的问题,为我们的Java...

    java排障工具

    本文将详细介绍"java排障工具"中包含的三个主要工具:PSTools、HeapDump分析以及ThreadDump分析。 首先,PSTools是一组由Microsoft开发的命令行工具,虽然它们主要针对Windows系统,但对Java开发者来说也非常有用。...

    weblogic dump 学习

    它和Threaddump以及Heapdump共同组成了定位Java应用问题的三件套。Javadump包含关于Java进程的详细信息,如系统属性、环境变量、线程堆栈信息等。在某些情况下,Javadump文件对于深层次的问题分析是非常有用的。 ##...

    JStack和Java Thread Dumps分析

    ### JStack和Java Thread Dumps分析 #### 一、引言 在Java应用程序开发与维护过程中,时常会遇到性能瓶颈或死锁等问题。这些问题往往难以定位,尤其当系统处于高负载下时,更是如此。此时,`JStack`工具便显得尤为...

    JVM Dump与Java对象的内存布局

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

    java IBM websphere 内存溢出 javacore deapdump CPU内存分析工具

    `deapdump`(也称为`thread dump`或`heap dump`)是另一种重要的诊断工具,它提供了更深入的内存分析。当WebSphere遇到问题时,可以通过触发deapdump获取当前JVM的线程详细信息以及堆内存快照。堆内存快照可以揭示...

    MemoryAnalyzer分析dump文件

    4. **Thread Dump Analyzer**:除了heap dump,MAT还可以分析线程dump,帮助我们理解线程的状态和阻塞情况,这对于排查多线程问题非常有帮助。 5. **Shallow Heap/Retained Heap**:这两个指标分别表示对象自身占用...

Global site tag (gtag.js) - Google Analytics