java分析工具
jinfo
jstat
jmap
jstack
1.jinfo
檢視java程序的擴充參數
-flag 檢視某個jvm參數
-flag +/- 動态開啟或關閉部分jvm參數
-flag name=value 修改部分jvm參數
flags 檢視所有jvm參數
-sysprops 檢視系統參數(System.getProperties())
①-flag 檢視某個jvm參數
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
jvm參數
②flag +/- 動态開啟或關閉部分jvm參數
檢視可關閉或開啟的jvm參數
java -XX:+PrintFlagsFinal -version|grep manageable
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
關閉某個程序的GC日志
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
③ -flag name=value 修改部分jvm參數
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
④flags 檢視所有jvm參數
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
sysprops 檢視系統參數
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
2. jstat (Java Virtual Machine statistics monitoring tool)虛拟機統計監控工具
檢視堆記憶體各部分使用量,加載類的數量
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
jstat
option: 參數選項
-t: 可以在列印的列加上Timestamp列,用于顯示系統運作的時間
-h: 可以在周期性資料資料的時候,可以在指定輸出多少行以後輸出一次表頭
vmid: Virtual Machine ID( 程序的 pid)
interval: 執行每次的間隔時間,機關為毫秒
count: 用于指定輸出多少次記錄,預設則會一直列印
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
options
說明
-class
顯示類加載相關資訊
-gc
垃圾回收統計
-gccapacity
堆記憶體統計
-gcnew
新生代垃圾回收統計
-gcnewcapacity
新生代記憶體統計
-gcold
老年代垃圾回收統計
-gcoldcapacity
老年代記憶體統計
-gcmetacapacity
中繼資料空間統計
-gcutil
顯示垃圾收集資訊
-gccause
顯示垃圾回收的相關資訊(通-gcutil),同時顯示最後一次或目前正在發生的垃圾回收的誘因
-compiler
顯示JIT編譯相關資訊
-printcompilation
輸出JIT編譯的方法資訊
① -class 類加載統計
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
-class
參數
解釋
loaded
已加載的類數量
Bytes
所占空間大小
Unloaded
已解除安裝的類數量
Bytes
已解除安裝類的空間大小
Time
裝載類解除安裝類話費時間
② -gc垃圾回收統計
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
參數
解釋
S0C
年輕代中第一個survivor的大小(位元組)
S1C
第二個survivor大小
S0U
第一個survivor已使用大小
S1U
第二個survivor已使用大小
EC
Eden總大小
EU
Eden已使用大小
OC
老年代大小
OU
老年代已使用大小
MC
metaspace(中繼資料空間)大小
MU
中繼資料已使用大小
CCSC
壓縮類空間大小
CCSU
壓縮類已使用空間大小
YGC
年輕代GC次數
YGCT
年輕代GC消耗時間(s)
FGC
老年代GC次數
FGCT
老年代GC消耗時間
GCT
GC總消耗時間
③-gccapacity 堆記憶體統計
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
參數
說明
NGCMN
新生代最小容量
NGCMX
新生代最大容量
NGC
目前新生代容量
S0C
第一個survivor大小
S1C
第二個survivor大小
EC
Eden大小
OGCMN
老年代最小容量
OGCMX
老年代最大容量
OGC
老年代目前容量
OC
老年代容量
MCMN
metaspace最小容量
MCMX
metaspace最大容量
MC
metaspace目前大小
CCSMN
壓縮類空間最小容量
CCSMX
壓縮類空間最大容量
CCSC
壓縮類空間目前大小
YGC
新生代gc次數
FGC
老年代gc次數
④-gcnew 新生代gc統計
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
參數
說明
S0C
第一個survivor大小
S1C
第二個survivor大小
S0U
第一個survivor已使用大小
S1U
第二個survivor已使用大小
TT
對象在新生代存活的次數???
MTT
對象在新生代存活的最大次數
DSS
期望的survivor大小???
EC
Eden大小
EU
Eden已使用大小
YGC
新生代gc次數
TGCT
新生代GC消耗時間
⑤-gcnewcapacity 新生代記憶體統計
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
參數
說明
NGCMN
年輕代最小容量
NGCMX
年輕嗲最大容量
NGC
目前年輕代大小
S0CMX
survivor1最大容量
S0C
目前survivor1大小
S1CMX
survivor2最大容量
S1C
目前survivor2大小
ECMX
Eden最大容量
EC
目前Eden大小
YGC
年輕代GC次數
FGC
老年代GC次數
⑥-gcold 老年代gc統計
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
參數
說明
MC
方法區(metaspace)大小
MU
metaspace已使用大小
CCSC
壓縮類空間大小
CCSU
壓縮類空間已使用大小
OC
老年代大小
OU
老年代已使用大小
YGC
年輕代GC次數
FGC
老年代GC次數
FGCT
老年代GC消耗時間
GCT
GC消耗總時間
⑦-gcoldcapacity 老年代記憶體統計
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
參數
說明
OGCMN
老年代最小容量
OGCMX
老年代最大容量
OGC
目前老年代大小
OC
老年代大小
YGC
年輕代次數
FGC
老年代GC次數
FGCT
老年代GC消耗時間
GCT
GC總消耗時間
⑧-gcmetacapacity 中繼資料空間記憶體統計
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
參數
說明
MCMN
metaspace最小容量
MCMX
metaspace最大容量
MC
目前metaspace大小
CCSMN
壓縮類空間最小容量
CCSMX
壓縮類空間最大容量
CCSC
目前壓縮類空間大小
YGC
年輕代GC次數
FGC
老年代GC次數
GCT
GC總消耗時間
⑨-gcutil gc統計
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
參數
說明
S0
survivor1使用比率
S1
survivor2使用比率
E
Eden使用占Eden總容量的百分比
O
老年代使用比率
M
metaspace使用比率
CCSC
壓縮類空間使用比率
YGC
年輕代gc次數
YGCT
年輕代GC消耗時間
FGC
老年代GC次數
FGCT
老年代GC消耗時間
GCT
GC消耗總時間
⑩-gccause 顯示gc資訊,比-gcutil 多了一項 最後一次或目前發生GC的原因,
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
參數
說明
LGCC
最後一次發生GC的原因
GCC
NoGC(目前沒有發生GC)
⑪ -compiler 顯示JIT編譯資訊
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
參數
說明
Compoled
編譯任務執行數量
Failed
編譯任務執行失敗的數量
Invalid
編譯任務執行失效的數量
Time
編譯任務消耗時間
FailedType
最後一個編譯任務失敗的類型
FailedMethod
最後一個編譯任務失敗 所在的類及方法
⑫ -printcompilation 目前vm執行資訊
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
參數
說明
Compiled
編譯任務執行數量
Size
方法生成的位元組碼大小
Type
編譯類型
Method
類名和方法名用來辨別編譯的方法。類名使用/做為一個命名空間分隔符。方法名是給定類中的方法。上述格式是由-XX:+PrintComplation選項進行設定的
3.jmap 檢視記憶體資訊
①檢視類執行個體數及占用記憶體大小
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
log.txt 檔案内容如下
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
②堆資訊
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
③堆記憶體dump
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
也可以設定記憶體溢出自動導出dump檔案(記憶體很大的時候可能導不出來):
-XX:+HeapDumpOnOutOfMemory
-X:HeapDumpPath=./
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
可以用jvisualvm指令工具導入該dump檔案分析
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
jstack 堆棧跟蹤工具,生成目前時刻的線程快照
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
可以使用jstack進行死鎖檢測
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
死鎖
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4Y2YzkjM3MTN1ITMvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png