Java內存,CPU佔用太高排查
1.ps -ef | grep tomcat名字 -->拿到Tomcat進程的pid
2.jstack -l 進程pid >> jstack.log -->打印並保存該進程中堆棧的使用信息日誌
2.top -Hp pid -->展現進程中全部線程的cpu佔用狀況
3.printf %x 線程pid -->該線程對應的16進制
4.vim jstack.log -->編輯查找3中打印的16進制值
5.分析並定位到問題代碼
Java內存泄漏排查
1.ps -ef | grep 進程 --->拿到進程的pid
2.top -p [pid] -->查看進程資源佔用狀況 只要看內存
3.jstat -gcutil [pid] 60000 -->總結垃圾回收統計 每分鐘輸出一次
jstat -gc [pid] 60000 -->垃圾回收統計 每分鐘輸出一次
jstat -gcnew pid --> 新生代垃圾回收統計
jstat -gccapacity pid -->堆內存統計
jstat -gcmetacapacity pid -->元數據空間統計
jstat -gcnewcapacity pid -->新生代內存空間統計
4.觀察結果 是否存在大量full gc, 若是發現是由於大量FULL GC形成程序執行緩慢的話,就要接着查看究竟是程序的哪些部分佔用的
5.jmap -histo:live [pid] | head -n 1000 -->查看進程下各類類型的對象建立了多少個,以及每種對象佔用內存的狀況vim
釋、2.中參數詳解
total 進程總數
running 正在運行的進程數
sleeping 睡眠的進程數
stopped 中止的進程數
zombie 殭屍進程數
Cpu(s):
us 用戶空間佔用CPU百分比
sy 內核空間佔用CPU百分比
ni 用戶進程空間內改變過優先級的進程佔用CPU百分比
id 空閒CPU百分比
wa 等待輸入輸出的CPU時間百分比
hi:硬件CPU中斷佔用百分比
si:軟中斷佔用百分比
st:虛擬機佔用百分比
3.中jstat -gcutil [pid] 60000參數詳解
S0:倖存1區當前使用比例
S1:倖存2區當前使用比例
E:伊甸園區使用比例
O:老年代使用比例
M:元數據區使用比例
CCS:壓縮使用比例
YGC:年輕代垃圾回收次數
FGC:老年代垃圾回收次數
FGCT:老年代垃圾回收消耗時間
GCT:垃圾回收消耗總時間
jstat -gc [pid] 60000參數詳解
S0C:第一個倖存區的大小
S1C:第二個倖存區的大小
S0U:第一個倖存區的使用大小
S1U:第二個倖存區的使用大小
EC:伊甸園區的大小
EU:伊甸園區的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法區大小
MU:方法區使用大小
CCSC:壓縮類空間大小
CCSU:壓縮類空間使用大小
YGC:年輕代垃圾回收次數
YGCT:年輕代垃圾回收消耗時間
FGC:老年代垃圾回收次數
FGCT:老年代垃圾回收消耗時間
GCT:垃圾回收消耗總時間
jstat -gcnew pid參數詳解
S0C:第一個倖存區大小tomcat
S1C:第二個倖存區的大小服務器
S0U:第一個倖存區的使用大小線程
S1U:第二個倖存區的使用大小日誌
TT:對象在新生代存活的次數對象
MTT:對象在新生代存活的最大次數進程
DSS:指望的倖存區大小內存
EC:伊甸園區的大小ci
EU:伊甸園區的使用大小資源
YGC:年輕代垃圾回收次數
YGCT:年輕代垃圾回收消耗時間
jstat -gcmetacapacity pid參數詳解
MCMN:最小元數據容量
MCMX:最大元數據容量
MC:當前元數據空間大小
CCSMN:最小壓縮類空間大小
CCSMX:最大壓縮類空間大小
CCSC:當前壓縮類空間大小
YGC:年輕代垃圾回收次數
FGC:老年代垃圾回收次數
FGCT:老年代垃圾回收消耗時間
GCT:垃圾回收消耗總時間
jstat -gcnewcapacity pid參數詳解
NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:當前新生代容量
S0CMX:最大幸存1區大小
S0C:當前倖存1區大小
S1CMX:最大幸存2區大小
S1C:當前倖存2區大小
ECMX:最大伊甸園區大小
EC:當前伊甸園區大小
YGC:年輕代垃圾回收次數
FGC:老年代回收次數
jstat -gcoldcapacity pid
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:當前老年代大小
OC:老年代大小
YGC:年輕代垃圾回收次數
FGC:老年代垃圾回收次數
FGCT:老年代垃圾回收消耗時間
GCT:垃圾回收消耗總時間