第一步:通過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過高問題結束了,謝謝大家批評指針!