1、執行top命令,看具體是哪個進程導致CPU 100%,複製問題進程的PID。
2、執行命令:top -p PID -H 查看指定進程裏面的線程狀態,定位到CPU太高的線程,開頭的PID實際就是線程ID(TID)。
3、執行命令:printf "%x\n" TID 把TID轉換爲十六進制。
4、執行命令:jstack PID | grep TID -A 30 顯示指定進程的棧信息,看是否有鎖,或者其它耗時操作。
5、執行命令:jmap -heap PID 查看堆信息。
對於jstack和jmap工具,oracle JDK和open JDK存在一些差異,本文用的是oracle JDK。