top 定位cpu占比高的pid
jps -l 定位具體是后台哪個應用程序
ps -mp 進程id -o(自定義格式) THREAD,tid,time 定位當前進程所有線程占用cpu時間高的線程id
jstack 進程id | grep tid(線程id轉換為英文小寫16進制格式) -A行數 定位到具體某一行代碼引起的
案例演示

程序跑一下
開始進行定位分析





線上系統的CPU負載過高的兩個常見場景
第一個場景:是你自己在系統里創建了大量的線程, 這些線程同時並發運行,而且工作負載都很重,過多的線程同時並發運行就會導致你的機器CPU負載過重
第二個場景:就是你的機器運行的JVM在執行頻繁的Full GC, Full GC 是非常耗費CPU資源的, 它是一個非常負載的過程,所以一旦你的JVM有頻繁的Full GC,
帶來的一個明顯感覺,一個是系統可能會時不時的卡死, 因此Full GC 會帶來一定的"Stop the world" 問題, 一個是機器的CPU負載過高.
所以一旦知道CPU負載過高的兩個原因,就容易排查了
首先看一下JVM Full GC 的頻率 通過jstat,或者是監控平台, 很容易看到現在Full GC頻率, 如果是Full GC頻繁,那就是Full Gc引起的CPU負載過高
如果Full GC頻率很正常, 那就肯定是你的系統創建了過多線程在並發執行負載很重的任務了
