JAVA死锁的检测流程

步骤一. 查询检测的进程

1.首先查看系统资源占用信息,TOP看一下

USER 进程所属用户
PID 进程ID 
%CPU 进程占用CPU百分比
%MEM 进程占用内存百分比
VSZ 虚拟内存占用大小 单位:kb(killobytes)
RSS 实际内存占用大小 单位:kb(killobytes)
TTY 终端类型
STAT 进程状态
START 进程启动时刻
TIME 进程运行时长
COMMAND 启动进程的命令

发现正在运行的JAVA项目CPU占用率很高,百分之360左右了,那么问题一定出在这个程序中

2 .也可以通过名称查询进程pid

步骤二. 查询检测的线程

ps -mp pid -o THREAD,tid,time

ps -eo pmem,pcpu,rss,vsize,args | sort -k 1 -n -r | less

pmem: 内存使用
pcpu: cpu使用
RSS 实际内存占用大小
VSZ 虚拟内存占用大小
args 参数信息

  

找到占用时间长的线程

 通过工具把线程转成16进制,linux里面可以用自带的printf,eg. printf "%x\n" 22295

步骤三. 查询线程的状态

 jstack 21912|grep 5717 -A 30

在dump中,线程一般存在如下几种状态:
1、RUNNABLE,线程处于执行中
2、BLOCKED,线程被阻塞
3、WAITING,线程正在等待
4、TIMED_WAITING,这个一般是指这个线程是Timer定期执行任务,但是当前处于waiting状态

再结合代码分析具体的问题

原文地址:https://www.cnblogs.com/cqwo/p/13689667.html