`
steveoyung
  • 浏览: 29208 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

分析java dump文件

 
阅读更多

注意,请不要被我误导,我没有看其他资料,这是我自己分析的,有些可能是不对的

 

"DestroyJavaVM" prio=6 tid=0x00316800 nid=0x448 waiting on condition [0x00000000

..0x00a0fd4c]

   java.lang.Thread.State: RUNNABLE

 

"Thread-1" prio=6 tid=0x02f85000 nid=0xd18 waiting for monitor entry [0x0319f000

..0x0319fd14]

   java.lang.Thread.State: BLOCKED (on object monitor)

        at xunlei.kkk.f2(TestLock.java:20)

        - waiting to lock <0x22ad0160> (a java.lang.Object)//在“入口区”等待获取<0x22ad0160>

        - locked <0x22ad0158> (a java.lang.Object)//获得了监视器<0x22ad0158>

        at xunlei.TestLock$2.run(TestLock.java:42)

 

"Thread-0" prio=6 tid=0x02bff400 nid=0xd40 waiting for monitor entry [0x02f4f000

..0x02f4fd94]

   java.lang.Thread.State: BLOCKED (on object monitor)

        at xunlei.kkk.f1(TestLock.java:9)

        - waiting to lock <0x22ad0158> (a java.lang.Object) 在“入口区”等待获取<0x22ad0158>

        - locked <0x22ad0160> (a java.lang.Object) //获得了监视器<0x22ad0160>

        at xunlei.TestLock$1.run(TestLock.java:35)

 

"A2" prio=6 tid=0x02c01400 nid=0xb0c in Object.wait() [0x02fef000..0x02fefa94]

   java.lang.Thread.State: WAITING (on object monitor)

        at java.lang.Object.wait(Native Method)

        - waiting on <0x22a15d48> (a java.lang.Object)//在“等待区”等待获取<0x22a15d48>

        at java.lang.Object.wait(Object.java:485)

        at xunlei.OutputName.run(Test.java:58)

        - locked <0x22a15d48> (a java.lang.Object)

 

"A1" prio=6 tid=0x02c00000 nid=0xf8 in Object.wait() [0x02f9f000..0x02f9fb14]

   java.lang.Thread.State: WAITING (on object monitor)

        at java.lang.Object.wait(Native Method)

        - waiting on <0x22a15d48> (a java.lang.Object)

        at java.lang.Object.wait(Object.java:485)

        at xunlei.OutputName.run(Test.java:58)

        - locked <0x22a15d48> (a java.lang.Object)

 

"A0" prio=6 tid=0x02c17800 nid=0xe68 in Object.wait() [0x02f4f000..0x02f4fb94]

   java.lang.Thread.State: WAITING (on object monitor)

        at java.lang.Object.wait(Native Method)

        - waiting on <0x22a15d48> (a java.lang.Object)

        at java.lang.Object.wait(Object.java:485)

        at xunlei.OutputName.run(Test.java:58)

        - locked <0x22a15d48> (a java.lang.Object)

 

 

windowscmd.exe中运行的java程序,按下ctrl+break,则会弹出此时程序的堆栈,上面显示了线程的几种状态

 

一、- locked <0x22ad0158> (a java.lang.Object)

线程获得了监视器<0x22ad0158>

 

二、- waiting to lock <0x22ad0160> (a java.lang.Object)

此线程不持有监视器<0x22ad0160>,但是它期待着获得监视器<0x22ad0160>

 

此线程是在“入口区”等待获取监视器<0x22ad0160>,即此线程不必等待其他线程执行<0x22ad0160>.notify()<0x22ad0160>.notifyAll(),而是一旦<0x22ad0160>被其他线程释放掉(通过其他线程<0x22ad0160>.notify()<0x22ad0160>.notifyAll(),或者其他线程<0x22ad0160>.wait()),此线程总是会去争抢<0x22ad0160>

 

三、- waiting on <0x22a15d48> (a java.lang.Object)

此线程刚刚执行了<0x22a15d48>.wait()后释放了监视器<0x22a15d48>,并期望再次获得<0x22a15d48>

此线程是在“等待区”等待获取监视器<0x22a15d48>,当然,再次获得时,需要其他线程调用<0x22a15d48>.notify()<0x22a15d48>.notifyAll(),如果其他线程不调用<0x22a15d48>.notify()<0x22a15d48>.notifyAll(),则此线程永远不会复活

 

在下面的语句中

       synchronized (obj) {// waiting to lock <0x22a15d48>

           while (!condition) {

              obj.wait();//waiting on <0x22a15d48>(不再持有监视器了,在“等待区”期待着再次获得监视器)

           }

           // do when condition is OK

       }

 

四、obj.wait()包含了两层含义:

1、  此线程释放了obj的监视器,即此线程现在已经不再持有obj的监视器啦

2、  在“等待区”等待着再次获取obj的监视器(其他线程必须调用obj.notify()obj.notifyAll(),如果仅仅执行完成synchronized语句或synchronized块而没有调用obj.notify()obj.notifyAll(),则“等待区”中的线程就永远不会苏醒)

 

五、线程的状态

1、  java.lang.Thread.State: RUNNABLE,此线程正在运行

2、  java.lang.Thread.State: WAITING,此线程位于“等待区”,等待其他线程调用<0x22a15d48>.notifyAll(),否则,这个线程永远不可能苏醒

3、  java.lang.Thread.State: BLOCKED,此线程位于“入口区”,且被阻塞了,在上面的例子中,死锁了,永远不会有解除block的机会(当然,在Java中,有些I/O方法也会阻塞的,不过,等到I/O完成后,就会自动解除block啦)

 

分享到:
评论

相关推荐

    mat java 分析 文件 dump

    #### 二、MAT工具分析Java Dump文件的关键知识点 ##### 1. Histogram **定义:** Histogram是MAT中的一个重要功能,用于统计和显示特定类型的对象数量及其占用的空间大小。在MAT中,Histogram提供了对象数量和空间...

    JavaDump分析

    JavaDump文件主要包含线程Dump和堆Dump两个部分。线程Dump记录了Java虚拟机中所有线程的运行状态,它通常以纯文本格式保存,方便查看和分析。堆Dump则更进一步,它不仅包含线程信息,还包括所有堆对象的状态,但其...

    java dump堆栈分析工具

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

    java 线程 dump 分析工具 2.3.3

    java 线程Dump 分析工具: Java的TDA线程转储分析器是一个用于分析Sun Java VM生成的线程转储和堆信息的小型Swing GUI(目前用1.4测试)。它从提供的日志文件中解析线程转储和类直方图。它提供关于发现的线程转储的...

    javacore和dump分析工具

    这个文件最重要的作用就是分析 Java 堆内存泄露问题,heap analyzer,MAT 等工具都可以分析这种文件。 Java core 文件保存的是 java 应用程序在崩溃时或任一时刻关于 Java 运行环境的各种信息。包括 Java 虚拟机的...

    javacore文件及heapdump文件分析

    javacore 文件及 heapdump 文件分析 javacore 文件和 heapdump 文件是 Java 应用程序在遇到致命问题时产生的两个文件,这两个文件可以帮助我们分析和解决 Java 应用程序中的问题。 javacore 文件是一个文本文件,...

    AIX dump分析工具

    "AIX dump分析工具"是专门用于解析和理解这些dump文件的工具,帮助管理员识别并解决Java应用服务器的问题。本文将详细介绍AIX dump分析工具的工作原理、用途以及如何使用它来分析ha398.jar、ga397.zip和jca37.zip等...

    JAVA jvm DUMP 内存分析

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

    Jvm堆栈dump文件分析

    IBM提供了一款名为HeadAnalyzer的工具,版本4.1.4,专门用于分析Java堆栈信息,尤其适用于WebSphere应用服务器环境。HeadAnalyzer能够帮助开发者和系统管理员深入理解JVM内部的工作机制,识别内存泄漏、线程阻塞以及...

    javacore\heapdump文件分析工具

    本篇文章将详细讲解如何使用`javacore`和`heapdump`分析工具,特别是针对Websphere环境的`ha`和`jca`工具,以及如何使用JDK1.6来打开和解析这些文件。 首先,`javacore`文件是Java虚拟机(JVM)在遇到特定事件(如...

    jca-分析javacore和dump.zip

    "jca457.jar"很可能是JCA工具的一个版本,用于处理javacore和heap dump文件。执行步骤.txt文件应该包含了以下步骤: 1. **运行JCA工具**:通常使用命令行运行,如`java -jar jca457.jar [javacore_file] [heap_dump...

    IBM分析dump文件工具

    IBM分析dump文件工具是针对IBM软件系统中出现的问题或异常情况的一种诊断手段。在IBM的众多产品线中,如DB2数据库、WebSphere应用服务器、z/OS操作系统等,都有可能产生dump文件,这些文件记录了系统运行时的内存...

    dump文件分析工具,.hprof memoryanalyzer_v1.5.0.rar

    1. **对象概述(Leak Suspects)**:MAT会自动分析dump文件并提供可能的内存泄漏候选,通过" dominator tree "显示哪些对象占用了最多的内存,并尝试找出持有这些对象的"疑似罪犯"。 2. **支配树(Dominator Tree)...

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

    首先,Java堆内存dump,通常是以.hprof格式存储的文件,包含了在特定时刻JVM内存中的所有对象和类的信息。分析堆内存dump可以揭示哪些对象占用了大量内存,以及这些对象之间的引用关系,从而找出可能导致内存泄漏的...

    JAVA线程dump的分析

    在分析JAVA线程dump时,需要了解JAVA线程的编程原理和同步机制,包括线程的状态、调用堆栈和Monitor的状态。不同JAVA虚拟机的线程dump的创建方法和文件格式是不一样的,不同的JVM版本,dump信息也有差别。 在实际...

    IBM thread dump文件分析工具

    在Java虚拟机(JVM)的运行过程中,有时会出现性能问题或者系统挂起的情况,这时候我们需要深入了解线程的运行状态,这就是"IBM thread dump文件分析工具"的作用所在。线程dump文件是JVM在特定时刻生成的一种快照,...

    java dump分析工具ha456

    当遇到内存溢出问题时,通常会先使用`jmap`生成dump文件,然后使用专门的分析工具,如Eclipse Memory Analyzer (MAT)、VisualVM等对dump文件进行解析。这些工具能帮助我们找到内存泄漏的根源,识别长期存活的大对象...

    heapdump分析工具

    通过分析heapdump文件,我们可以找出占用内存较大的对象,追踪内存泄漏的源头,以及了解对象生命周期和垃圾收集情况。 要生成heapdump,可以使用JVM内置的命令行选项,例如`-XX:+HeapDumpOnOutOfMemoryError`来配置...

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

    "Java Core-HeapDump 文件及其分析方法" Java Core-HeapDump 文件是 Java 应用程序在发生致命问题的情况下产生的两个文件,它们分别是 JavaCore 文件和 HeapDump 文件。这些文件能够帮助开发者保留 Java 应用程序...

Global site tag (gtag.js) - Google Analytics