JVM找出佔用CPU最高的執行緒

ppp2152發表於2020-11-22

第一步: 通過 top命令查詢到這個消耗CPU的程式號PID 8958
top
第二步:使用 top -Hp pid(shift+p 按cpu排序,shift+m 按記憶體排序)
top -Hp 8958
獲取到這個程式下面所有執行緒,通過檢視%CPU找到最耗費CPU的是執行緒PID

第三步:使用 printf '%x\n' PID (PID為上一步中獲取到的執行緒號)轉換成對應的16進位制PID 5c7e


第四步:使用jstack 獲取對應的執行緒資訊
jstack 8958 | grep 5c7e
注意:8958是一開始獲取的程式號,而5c7e則是這個程式下面最最耗費CPU的執行緒號

 

第五步:jstack pid(程式pid)>stack.dump

執行上面的命令,將該消耗程式的執行緒相關資訊匯出到stack.dump檔案中,開啟這個檔案檢視每個執行緒的具體狀態
一般來說,出現問題的程式碼大多數是我們自己寫的業務程式碼導致的,所以我們可以通過檢視那些我們自己建立的類的相關資訊,比如根據我們自己建立的包路徑去搜尋,搜尋結果可能不止一個地方會出現我們的包路徑,這個就需要結合我們自己的程式碼的業務邏輯來定位到底是哪一個執行緒可能出現問題了。

相關文章