linux如何獲取占用CPU最高的線程id?(java項目)


 

1、可以登上機器,確認下是什么線程使 CPU 飆高。先ps查看 Java 進程的 PID:

ps -ef | grep  xx項目

2、拿到進程 pid 后,可以使用 top 命令,來看是什么線程占用了 CPU。
top -p 12309 -H

-p 用於指定進程,-H 用於獲取每個線程的信息,從 top 輸出的內容,可以看到有四個線程占用了非常高的 CPU:

到這里可以拿到12313、12312、12311、12314這四個線程id。為了確定這些是什么線程,需要使用 jstack 命令來查看這幾個是什么線程。
高占用CPU的是什么線程?
3   jstack 是 Java 虛擬機自帶的一種堆棧跟蹤工具,用於打印出給定的 Java 進程 ID 或 core file 或遠程調試服務的 Java 堆棧信息。使用下面命令,將 Java 進程的堆棧信息打印到文件中:
jstack -l 12309 > stack.log

 

在線程堆棧信息中,線程 id 是使用十六進制來表示的。將上面四個四個線程 id 轉換為16進制,分別是0X3019、0X3018、0×3017、0x301A。在 stack.log 中可以找到這幾個線程:

 

 

到這里可以確定的是,死循環引發了Full GC,四個GC線程一直嘗試着回收內存,這四個線程將CPU占滿。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM