啃碎并发(四):Java线程Dump分析

  • Post author:
  • Post category:java


1 Thread Dump介绍

1.1 什么是Thread Dump

Thread Dump是非常有用的诊断Java应用问题的工具。

每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能力

,虽然各个 Java虚拟机打印的thread dump略有不同,但是

大多都提供了当前活动线程的快照,及JVM中所有Java线程的堆栈跟踪信息,堆栈信息一般包含完整的类名及所执行的方法

,如果可能的话还有源代码的行数。

1.2 Thread Dump特点


1.3 Thread Dump抓取


一般当服务器挂起,崩溃或者性能低下时

,就需要抓取服务器的线程堆栈(Thread Dump)用于后续的分析。在实际运行中,往往一次 dump的信息,还不足以确认问题。为了反映线程状态的动态变化,

需要接连多次做thread dump,每次间隔10-20s,建议至少产生三次 dump信息

,如果每次 dump都指向同一个问题,我们才确定问题的典型性。


1.操作系统命令获取ThreadDump


注意:



2.JVM 自带的工具获取线程堆栈





2 Thread Dump分析




2.1 Thread Dump信息


1.头部信息:时间,JVM信息



2.线程INFO信息块:




3.Java thread statck trace详解:



堆栈信息应该逆向解读

:程序先执行的是第7行,然后是第6行,依次类推。


也就是说对象先上锁,锁住对象0xb3885f60,然后释放该对象锁,进入waiti



版权声明:本文为MSYDTT原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。