三个实例演示 Java Thread Dump 日志分析
- 死锁,Deadlock(重点关注)
- 执行中,Runnable
- 等待资源,Waiting on condition(重点关注)
- 等待获取监视器,Waiting on monitor entry(重点关注)
- 暂停,Suspended
- 对象等待中,Object.wait() 或 TIMED_WAITING
- 阻塞,Blocked(重点关注)
- 停止,Parked
下面我们先从第一个例子开始分析,然后再列出不同线程状态的含义以及注意事项,最后再补充两个实例。
含义如下所示:
- Deadlock:死锁线程,一般指多个线程调用间,进入相互资源占用,导致一直等待无法释放的情况。
- Runnable:一般指该线程正在执行状态中,该线程占用了资源,正在处理某个请求,有可能正在传递SQL到数据库执行,有可能在对某个文件操作,有可能进行数据类型等转换。
- Waiting on condition:等待资源,或等待某个条件的发生。具体原因需结合 stacktrace来分析。
- 如果堆栈信息明确是应用代码,则证明该线程正在等待资源。一般是大量读取某资源,且该资源采用了资源锁的情况下,线程进入等待状态,等待资源的读取。
- 又或者,正在等待其他线程的执行等。
- 如果发现有大量的线程都在处在 Wait on condition,从线程 stack看,正等待网络读写,这可能是一个网络瓶颈的征兆。因为网络阻塞导致线程无法执行。
- 一种情况是网络非常忙,几乎消耗了所有的带宽,仍然有大量数据等待网络读写;
- 另一种情况也可能是网络空闲,但由于路由等问题,导致包无法正常的到达。
- 另外一种出现 Wait on condition的常见情况是该线程在 sleep,等待 sleep的时间到了时候,将被唤醒。
- Blocked:线程阻塞,是指当前线程执行过程中,所需要的资源长时间等待却一直未能获取到,被容器的线程管理器标识为阻塞状态,可以理解为等待资源超时的线程。
- Waiting for monitor entry 和 in Object.wait():Monitor是 Java中用以实现线程之间的互斥与协作的主要手段,它可以看成是对象或者 Class的锁。每一个对象都有,也仅有一个 monitor。从下图1中可以看出,每个 Monitor在某个时刻,只能被一个线程拥有,该线程就是 “Active Thread”,而其它线程都是 “Waiting Thread”,分别在两个队列 “ Entry Set”和 “Wait Set”里面等候。在 “Entry Set”中等待的线程状态是 “Waiting for monitor entry”,而在 “Wait Set”中等待的线程状态是 “in Object.wait()”。
图1 A Java Monitor
2)“waiting on condition”需要与堆栈中的“parking to wait for <0x00000000acd84de8> (a java.util.concurrent.SynchronousQueue$TransferStack)”结合来看。首先,本线程肯定是在等待某个条件的发生,来把自己唤醒。其次,SynchronousQueue 并不是一个队列,只是线程之间移交信息的机制,当我们把一个元素放入到 SynchronousQueue 中时必须有另一个线程正在等待接受移交的任务,因此这就是本线程在等待的条件。
综合示范三:in Obejct.wait() 和 TIMED_WAITING
三个实例演示 Java Thread Dump 日志分析相关推荐
- java Thread Dump 日志分析
jstack Dump 日志文件中的线程状态 dump 文件里,值得关注的线程状态有: 死锁,Deadlock(重点关注) 执行中,Runnable 等待资源,Waiting on condition ...
- java多线程基础篇(二)java线程常见问题Thread Dump日志分析
线程常见问题 CPU占用率很高,响应很慢 CPU占用率不高,但响应很慢 线程出现死锁的情况 CPU占用率不高,但响应很慢 有的时候我们会发现CPU占用率不高,系统日志也看不出问题,那么这种情况下,我们 ...
- Java分析系列之五:常见的Thread Dump日志案例分析
我们在上篇文章中详细描述了Thread Dump中Native Thread和JVM Thread线程的各种状态及描述,今天总结分析的一些原则,并详细列举一些案例进行说明. 目录 [隐藏] 1 症状及 ...
- java thread dump
一.thread dump 产品是Java写的,运行于JBOSS平台.操作系统为linux.当系统出现问题是很,可以通过thread dump分析就可以找到,但这只是解决问题的第一步,即找到问题的所在 ...
- Java的dump文件分析及JProfiler使用
Java的dump文件分析及JProfiler使用 1 dump文件介绍 从软件开发的角度上,dump文件就是当程序产生异常时,用来记录当时的程序状态信息(例如堆栈的状态),用于程序开发定位问题. i ...
- (转)性能分析之-- JAVA Thread Dump 分析综述
原文链接:http://blog.csdn.net/rachel_luo/article/details/8920596 最近在做性能测试,需要对线程堆栈进行分析,在网上收集了一些资料,学习完后,将相 ...
- 各种 Java Thread State 第一分析法则
用 TDA 工具,看到大量 Java Thread State 的第一反应是: 1,线程状态为"waiting for monitor entry": 意味着它 在等待进入一个临界 ...
- Java heap dump及分析
本文内容: 如何进行 heap dump MAT 的使用 object 的 Incoming 与 Outgoing References object 的 Shallow Size 与 Retaine ...
- Java Thread源码分析
1.Runnable接口源码: 1 public interface Runnable { 2 public abstract void run(); 3 } 2.Thread类与Runnable接口 ...
最新文章
- 安卓canvas设置HTML,安卓开发中view和canvas的理解
- synchronized,ReentrantLock解决锁冲突,脏读的问题
- Android中View绘制流程
- JAVA基础_修饰符
- 获取指定路径下的所有文件
- PHP的的指针的特性
- “鸡肋”的百度,掉队了 BAT? | 畅言
- 详解:Hive的存储格式与对比
- Lengauer-Tarjan算法--支配树构造(bzoj 2815: [ZJOI2012]灾难)
- 华为路由器命令行PPPOE拨号案例
- python matplotlib阶段性总结——word转txt、绘图、文件操作
- 技巧篇:常用的vba代码汇总
- 计算机储位分配,仓库储位分配的基本思路与原则
- Spring application使用@ 使用的问题:'@' that cannot start any token. (Do not use @ for indentation)
- 【统计建模与R软件】第二章 R软件的使用 上机练习4 猴子吃桃 鸡兔同笼
- MDK5.30下载来了,含镜像下载地址,ARM同时带来Cortex-M55调试展示(2020-05-05)
- 翡翠手链的形成来源于古人对于图腾的崇拜
- 微软 bing 壁纸 每日一图 bing api
- 免费好用的远程控制电脑软件推荐
- Transformer:让ChatGPT站在肩膀上的巨人?