首页 > 技术文章 > 排查java cpu飙升问题

zaizai1573 2022-07-04 16:40 原文

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)

推荐阅读