永洪社区

标题: 线程的分析方式 [打印本页]

作者: 王静静    时间: 2021-4-13 18:40
标题: 线程的分析方式
线程的分析方式都有哪些???

作者: Yonghong-Club    时间: 2021-4-13 19:24
常见的线程的分析方式:
在dump中,线程一般存在如下几种状态:
1、RUNNABLE,线程处于执行中
2、BLOCKED,线程被阻塞

3、WAITING,线程正在等待BLOCK是等待锁的线程(代码里可能含有synchronized),需要看该线程等待的线程在执行什么操作,如果持有锁的线程处于RUNNABLE则是正常行为(某些情况长时间RUNNABLE也是不正常行为,如执行一个简单sql数据库没有响应),如 果处于BLOCk,要继续查询下个锁的线程, 通常就是两种结果RUNNABLE和死锁。
Waiting是等待别人唤醒的线程,代码里主动调用了wait() 引起的, 需要notify()唤醒,比如,数据库连接池满了,新的获取数据库链接的线程会长时间处于waiting状态,直到现有使用连接池的connection关闭,会唤醒其中的waiting线程 继续执行,当线程长时间处于waiting状态,可能是需要重点关注分析的。
RUNNABLE是正在执行的线程。
有时全部线程都处于RUNNABL状态,需要多次打印比较线程的执行状态, 如果通过多次打印结果看到某个线程一直执行同一操作,如一直读取socket,一直在删除文件。
一般拿到线程信息,优先看block线程,block线程没问题时,这时通常一个个看,主要是看每个线程在干什么,通过这个干什么判断一些问题。







欢迎光临 永洪社区 (https://club.yonghongtech.com/) Powered by Discuz! X3.4