定位当前系统线程的堆栈信息:
1、使用 top
命令查看当前所有进程,找到目标进程id
2、使用 top -Hp pid
命令 查看资源占用较高的线程
3、使用 printf "%x\n" pid
打印成线程ID
4、使用 jstack pid |grep nid=0x线程ID -A 200
查看对应线程堆栈信息
查询当前有java项目的进程:
jps -lm
统计进程对应的线程数:
jstack -l PID | grep ‘java.lang.Thread.State’ | wc -l
统计 RUNNABLE (java线程将就绪(ready)和运行中(running)两种状态称为运行)的线程数:
jstack -l PID | grep ‘java.lang.Thread.State: RUNNABLE’ | wc -l
统计 WAITING (进入该线程需要等待其他线程做出一些特定的动作(通知或者中断))的线程数:
jstack -l PID | grep ‘java.lang.Thread.State: WAITING’ | wc -l
统计 TIMED_WAITING (等待超时)的线程数:
jstack -l PID | grep ‘java.lang.Thread.State: TIMED_WAITING’ | wc -l
统计 BLOCKING (表示线程阻塞)的线程数:
jstack -l PID | grep ‘java.lang.Thread.State: BLOCKING’ | wc -l
统计 死锁 的线程数:
jstack -l PID | grep ‘Java-level deadlock’ | wc -l