開篇
?在簡書看到一篇公眾號講如何排查CPU問題,想了想在日常工作中也偶爾遇到這樣的問題,所以在網(wǎng)上搜了搜該方面的文章,特意拷貝了一篇文章作日后排查參考。
?整體來說是按照三步走:
- 1、top命令發(fā)現(xiàn)占用cpu最多的進程PID;
- 2、ps命令查看該進程下占用cpu最多的線程tid并轉換為16進制;
- 3、jstack -l pid 保存進程堆棧并通過16進制的tid查找對應的代碼塊。
步驟
- 1、top命令發(fā)現(xiàn)某個進程占用了100%的CPU

- 2、通過ps命令,進一步確定哪個進程出了問題

- 3、再查看線程占用CPU的列表
ps -mp PID(進程號) -o THREAD,tid,time
說明:
-m Show threads after processes

- 4、找到占用CPU最高的線程,查看TID,將其轉換為16進制格式
printf "%x\n" TID
- 5、而后查看堆棧信息
jstack PID |grep 16進制TID -A 60
