第一步:找出最耗cpu的Java服務
輸入:top
輸入:P
得到最耗cpu的Java程序pid為:6142
第二步:找出該程序内最消耗CPU的線程
輸入:top -Hp 6142
得到最耗cpu的Java線程pid為:如6149
輸入:printf ‘%x\n’ 6149
得到6149的十六進制為 1805
第三步:查詢線程資訊
輸入:jstack 6142 |grep 1805
得到線程名:GC task thread#0 (ParallelGC)
定位問題為gc耗時所緻,可能機器記憶體告急或記憶體洩漏。
如果機器記憶體正常,則大機率為短時間記憶體洩露嚴重,導緻GC回收不過來,導緻CPU短時間飙升。
第四步:查詢記憶體占用較大的對象資訊
輸入:jmap -histo:live 6142 |head -20
得到記憶體占用較多的對象為HashMap,程式中排查。