- 登录服务器,执行命令top -c查看各个进程运行情况,找出cpu利用率最高的那个进程id,记为pid。
- 执行命令top -Hp pid,查看该进程中占用CPU最高的线程id,记为tid,并将其转换为十六进制(百度谷歌搜索进制转换)
- 执行命令jstack pid >> java.txt,输出该进程的堆栈信息到文件中,如下图所示,堆栈信息中包含每个线程的16进制ID以及状态,根据第二步获得的线程ID即可查找到该线程正在做什么操作。
Attaching to remote server pid, please wait...
2021-02-23 15:38:18
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.192-b12 mixed mode):
"Attach Listener" #10 daemon prio=9 os_prio=0 tid=0x00007f4ee0001000 nid=0x1956 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
// 线程16进制id
"Thread-0" #9 prio=5 os_prio=0 tid=0x00007f4f180d6000 nid=0x17ea runnable [0x00007f4f044da000]
java.lang.Thread.State: RUNNABLE
at com.cpuhigh.Test$MyThread.run(Test.java:8)