top命令 拿到对应的pid 值
ps -mp 12971 -o THREAD,tid,time #通过pid 信息 12971是进程的id
root@mng-56:~# ps -mp 12971 -o THREAD,tid,time
USER %CPU PRI SCNT WCHAN USER SYSTEM TID TIME #第一行 是总占用
116 5.7 - - - - - - 7-00:51:06
116 0.0 19 - futex_ - - 12971 00:00:00 #每个线程的 占用情况 最后一列是占用的时长
116 0.0 19 - futex_ - - 13257 00:00:12
root@mng-56:~# printf "%x\n" 10118 把占用 过高的 线程id 转换成16进制
2786
root@mng-57:~# jstack 1422 |grep 5d2 -A 100 #得到对应的堆栈的详细列表
"ClientManageThread_27" #257 prio=5 os_prio=0 tid=0x00007fc6540649a0 nid=0x821 waiting on condition [0x00007fc5525d2000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000005c0024cb8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)