如何排查java進程cpu過高


第一步:通過top -c 命令查看系統進程資源占用情況,同時關注下圖中%cpu這一列指標的情況

 

2.第二步:通過下圖我們可以得出結論進程號(PID)為18407的進程cpu占用100.3%,這個就是我們要重點排查的對象

 

 第三步:使用top -Hp 進程號 用來排查進程中線程cpu占用的情況,這里按照上面查到進程號為18407執行top -Hp 18407排查到線程cpu占用的情況如下,從圖中我們知道占用cpu過高的線程號為18540

 

第四步:通過jstack 進程號 |grep -C 20 線程號(注意這里的線程號需要轉換成16進制),我們這里要查看18540線程的堆棧信息,需要將18540轉換成16進制為0x486c(可以通過在linux系統執行printf %x 18540 來得到16進制值),

那么完整的命令為jstack 18407 |grep -C 20 'nid=0x486c' 展示的內容如下圖所示

 

 第五步:然后查看我們的代碼,如下圖所示,是ArthasController類中的第17行有一個死循環導致了cpu占用過高,至此java排查cpu過高問題結束了,謝謝大家批評指針!

 


免責聲明!

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



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