一、cpu過高
1、透過top命令,定位程序ID
透過top命令,檢視CPU使用率最高得程序ID,記為@pid
2、透過韓引數得top檢視cpu過高執行緒
命令 top -H -p [@pid]
,記錄結果得pid值,記為@tpid
3、透過printf 列印上述值得十六進位制
命令 printf 'ox%x\n' [@tpid]
,記錄結果為@tid
4、jstack命令檢視線性具體資訊
命令jstack [@pid] | grep [@tid]
,可以檢視執行緒具體資訊,再進行詳細定位
二、記憶體過高
1、top檢視較高得程序
top命令可以檢視cpu,記憶體等資訊,記錄程序ID為@pid
2、jstat檢視垃圾回收情況
命令jstat -gc [@pid] 1000
檢視GC情況,1000表示1秒重新整理一次
S0C:第一個倖存區的大小,單位KB。
S1C:第二個倖存區的大小。
S0U:第一個倖存區的使用大小。
S1U:第二個倖存區的使用大小。
EC:伊甸園區的大小。
EU:伊甸園區的使用大小。
OC:老年代大小。
OU:老年代使用大小。
MC:方法區大小(元空間)。
MU:方法區使用大小。
CCSC:壓縮類空間大小。
CCSU:壓縮類空間使用大小。
YGC:年輕代垃圾回收次數。
YGCT:年輕代垃圾回收消耗時間,單位s。
FGC:老年代垃圾回收次數。
FGCT:老年代垃圾回收消耗時間,單位s。
GCT:垃圾回收消耗總時間,單位s。
如果gc頻繁,每次回收記憶體空間也正常,那麼說明是因為物件建立過快導致記憶體一直佔用很高;如果每次回收的記憶體非常少,那麼有可能是因為記憶體洩漏導致記憶體一直無法被回收。
3、jmap檢視物件佔用記憶體情況
命令jmap -histo [@pid] | head 20
檢視前20個大物件
4、jmap到處dump檔案
如果第三步查不出來,可以將dump檔案匯出,並透過visualVM 工具開啟分析,命令 jmap -dump:live,file=/home/my.hprof
匯出dump檔案