如何通過jstat命令進行檢視堆記憶體使用情況?
摘要:jstat命令可以檢視堆記憶體各部分的使用量,以及載入類的數量。
本文分享自華為雲社群《JVM之通過jstat命令進行檢視堆記憶體使用情況》,作者:共飲一杯無 。
基本概念
jstat是JDK自帶的一個輕量級小工具。它位於java的bin目錄下,主要利用JVM內建的指令對Java應用程式的資源和效能進行實時的命令列的監控,包括了對Heap size和垃圾回收狀況的監控。jstat命令可以檢視堆記憶體各部分的使用量,以及載入類的數量。命令的格式如下:
jstat [-命令選項] [vmid] [間隔時間/毫秒] [查詢次數]
C:\Users\zjq>jstat -help
Usage: jstat -help|-options
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
Definitions:
<option> An option reported by the -options option
<vmid> Virtual Machine Identifier. A vmid takes the following form:
<lvmid>[@<hostname>[:<port>]]
Where <lvmid> is the local vm identifier for the target
Java virtual machine, typically a process id; <hostname> is
the name of the host running the target Java virtual machine;
and <port> is the port number for the rmiregistry on the
target host. See the jvmstat documentation for a more complete
description of the Virtual Machine Identifier.
<lines> Number of samples between header lines.
<interval> Sampling interval. The following forms are allowed:
<n>["ms"|"s"]
Where <n> is an integer and the suffix specifies the units as
milliseconds("ms") or seconds("s"). The default units are "ms".
<count> Number of samples to take before terminating.
-J<flag> Pass <flag> directly to the runtime system.
說明:
- option:引數選項
- -t:可以在列印的列加上Timestamp列,用於顯示系統執行的時間
- -h:可以在週期性資料輸出的時候,指定輸出多少行以後輸出一次表頭
- vmid:Virtual Machine ID( 程序的 pid)
- interval:執行每次的間隔時間,單位為毫秒
- count:用於指定輸出多少次記錄,預設則會一直列印
option 可以從下面引數中選擇
jstat -options
- -class 用於檢視類載入情況的統計
- -compiler 用於檢視HotSpot中即時編譯器編譯情況的統計
- -gc 用於檢視JVM中堆的垃圾收集情況的統計
- -gccapacity 用於檢視新生代、老生代及持久代的儲存容量情況
- -gcmetacapacity 顯示metaspace的大小
- -gcnew 用於檢視新生代垃圾收集的情況
- -gcnewcapacity 用於檢視新生代儲存容量的情況
- -gcold 用於檢視老生代及持久代垃圾收集的情況
- -gcoldcapacity 用於檢視老生代的容量
- -gcutil 顯示垃圾收集資訊
- -gccause 顯示垃圾回收的相關資訊(通-gcutil),同時顯示最後一次僅當前正在發生的垃圾收集的原因
- -printcompilation 輸出JIT編譯的方法資訊
案例
-class 檢視class載入統計
C:\Users\zjq>jps
24832 Jps
21180 Bootstrap
C:\Users\zjq>jstat -class 21180
Loaded Bytes Unloaded Bytes Time
3800 7339.7 409 783.0 6.35
說明:
- Loaded:載入class的數量
- Bytes:所佔用空間大小
- Unloaded:未載入數量
- Bytes:未載入佔用空間
- Time:時間
-compiler 檢視編譯統計
C:\Users\zjq>jstat -compiler 21180
Compiled Failed Invalid Time FailedType FailedMethod
2743 0 0 10.53 0
說明:
- Compiled:編譯數量。
- Failed:失敗數量
- Invalid:不可用數量
- Time:時間
- FailedType:失敗型別
- FailedMethod:失敗的方法
-gc 垃圾回收統計
C:\Users\zjq>jstat -gc 21180
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
28160.0 30208.0 0.0 0.0 260096.0 163920.6 115712.0 27193.7 21248.0 18539.6 2560.0 2053.2 6 0.096 1 0.057 0.153
#也可以指定列印的間隔和次數,每1秒中列印一次,共列印5次
C:\Users\zjq>jstat -gc 21180 1000 3
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
28160.0 30208.0 0.0 0.0 260096.0 171724.8 115712.0 27193.7 21248.0 18539.6 2560.0 2053.2 6 0.096 1 0.057 0.153
28160.0 30208.0 0.0 0.0 260096.0 172592.0 115712.0 27193.7 21248.0 18539.6 2560.0 2053.2 6 0.096 1 0.057 0.153
28160.0 30208.0 0.0 0.0 260096.0 172592.0 115712.0 27193.7 21248.0 18539.6 2560.0 2053.2 6 0.096 1 0.057 0.153
說明:
- S0C:第一個Survivor區的大小(KB)
- S1C:第二個Survivor區的大小(KB)
- S0U:第一個Survivor區的使用大小(KB)
- S1U:第二個Survivor區的使用大小(KB)
- EC:Eden區的大小(KB)
- EU:Eden區的使用大小(KB)
- OC:Old 區大小(KB)
- OU:Old使用大小(KB)
- MC:方法區大小(KB)
- MU:方法區使用大小(KB)
- CCSC:壓縮類空間大小(KB)
- CCSU:壓縮類空間使用大小(KB)
- YGC:年輕代垃圾回收次數
- YGCT:年輕代垃圾回收消耗時間
- FGC:老年代垃圾回收次數
- FGCT:老年代垃圾回收消耗時間
- GCT:垃圾回收消耗總時間
-gccapacity 堆記憶體統計
[[email protected] ~]# jstat -gccapacity 3346 #用於檢視新生代、老生代及持久代的儲存容量情況
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
[[email protected] ~]# jstat -gccapacity -h5 3346 1000 #-h5:每5行顯示一次表頭 1000:每1秒鐘顯示一次,單位為毫秒
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
- NGCMN:年輕代(young)中初始化(最小)的大小(位元組)
- NGCMX:年輕代(young)的最大容量 (位元組)
- NGC:年輕代(young)中當前的容量 (位元組)
- S0C:年輕代中第一個survivor(倖存區)的容量 (位元組)
- S1C:年輕代中第二個survivor(倖存區)的容量 (位元組)
- EC:年輕代中Eden(伊甸園)的容量 (位元組)
- OGCMN:old代中初始化(最小)的大小 (位元組)
- OGCMX:old代的最大容量(位元組)
- OGC:old代當前新生成的容量 (位元組)
- OC:Old代的容量 (位元組)
- MCMN:metaspace(元空間)中初始化(最小)的大小 (位元組)
- MCMX:metaspace(元空間)的最大容量 (位元組)
- MC:metaspace(元空間)當前新生成的容量 (位元組)
- CCSMN:最小壓縮類空間大小
- CCSMX:最大壓縮類空間大小
- CCSC:當前壓縮類空間大小
- YGC:從應用程式啟動到取樣時年輕代中gc次數
- FGC:從應用程式啟動到取樣時old代(全gc)gc次數
-gcmetacapacity 元資料空間統計
[[email protected] ~]# jstat -gcmetacapacity 3346 #顯示元資料空間的大小
MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT GCT
0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 8 0 0.000 0.020
- MCMN:最小元資料容量
- MCMX:最大元資料容量
- MC:當前元資料空間大小
- CCSMN:最小壓縮類空間大小
- CCSMX:最大壓縮類空間大小
- CCSC:當前壓縮類空間大小
- YGC:從應用程式啟動到取樣時年輕代中gc次數
- FGC:從應用程式啟動到取樣時old代(全gc)gc次數
- FGCT:從應用程式啟動到取樣時old代(全gc)gc所用時間(s)
- GCT:從應用程式啟動到取樣時gc用的總時間(s)
-gcnew 新生代垃圾回收統計
[[email protected] ~]# jstat -gcnew 3346 #用於檢視新生代垃圾收集的情況
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
128.0 128.0 67.8 0.0 1 15 64.0 1024.0 362.2 8 0.020
- S0C:年輕代中第一個survivor(倖存區)的容量 (位元組)
- S1C:年輕代中第二個survivor(倖存區)的容量 (位元組)
- S0U:年輕代中第一個survivor(倖存區)目前已使用空間 (位元組)
- S1U:年輕代中第二個survivor(倖存區)目前已使用空間 (位元組)
- TT:持有次數限制
- MTT:最大持有次數限制
- DSS:期望的倖存區大小
- EC:年輕代中Eden(伊甸園)的容量 (位元組)
- EU:年輕代中Eden(伊甸園)目前已使用空間 (位元組)
- YGC:從應用程式啟動到取樣時年輕代中gc次數
- YGCT:從應用程式啟動到取樣時年輕代中gc所用時間(s)
-gcnewcapacity 新生代記憶體統計
[[email protected] ~]# jstat -gcnewcapacity 3346 #用於檢視新生代儲存容量的情況
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
1280.0 83264.0 1280.0 8320.0 128.0 8320.0 128.0 66624.0 1024.0 8 0
- NGCMN:年輕代(young)中初始化(最小)的大小(位元組)
- NGCMX:年輕代(young)的最大容量 (位元組)
- NGC:年輕代(young)中當前的容量 (位元組)
- S0CMX:年輕代中第一個survivor(倖存區)的最大容量 (位元組)
- S0C:年輕代中第一個survivor(倖存區)的容量 (位元組)
- S1CMX:年輕代中第二個survivor(倖存區)的最大容量 (位元組)
- S1C:年輕代中第二個survivor(倖存區)的容量 (位元組)
- ECMX:年輕代中Eden(伊甸園)的最大容量 (位元組)
- EC:年輕代中Eden(伊甸園)的容量 (位元組)
- YGC:從應用程式啟動到取樣時年輕代中gc次數
- FGC:從應用程式啟動到取樣時old代(全gc)gc次數
-gcold 老年代垃圾回收統計
[[email protected]~]# jstat -gcold 3346 #用於檢視老年代及持久代垃圾收集的情況
MC MU CCSC CCSU OC OU YGC FGC FGCT GCT
8448.0 8227.5 1024.0 1003.7 15104.0 2102.2 8 0 0.000 0.020
- MC:metaspace(元空間)的容量 (位元組)
- MU:metaspace(元空間)目前已使用空間 (位元組)
- CCSC:壓縮類空間大小
- CCSU:壓縮類空間使用大小
- OC:Old代的容量 (位元組)
- OU:Old代目前已使用空間 (位元組)
- YGC:從應用程式啟動到取樣時年輕代中gc次數
- FGC:從應用程式啟動到取樣時old代(全gc)gc次數
- FGCT:從應用程式啟動到取樣時old代(全gc)gc所用時間(s)
- GCT:從應用程式啟動到取樣時gc用的總時間(s)
-gcoldcapacity 老年代記憶體統計
[[email protected]~]# jstat -gcoldcapacity 3346 #用於檢視老年代的容量
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
15104.0 166592.0 15104.0 15104.0 8 0 0.000 0.020
- OGCMN:old代中初始化(最小)的大小 (位元組)
- OGCMX:old代的最大容量(位元組)
- OGC:old代當前新生成的容量 (位元組)
- OC:Old代的容量 (位元組)
- YGC:從應用程式啟動到取樣時年輕代中gc次數
- FGC:從應用程式啟動到取樣時old代(全gc)gc次數
- FGCT:從應用程式啟動到取樣時old代(全gc)gc所用時間(s)
- GCT:從應用程式啟動到取樣時gc用的總時間(s)
-gcutil 垃圾回收統計
[[email protected]~]# jstat -gcutil 3346 #顯示垃圾收集資訊
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
52.97 0.00 42.10 13.92 97.39 98.02 8 0.020 0 0.000 0.020
- S0:年輕代中第一個survivor(倖存區)已使用的佔當前容量百分比
- S1:年輕代中第二個survivor(倖存區)已使用的佔當前容量百分比
- E:年輕代中Eden(伊甸園)已使用的佔當前容量百分比
- O:old代已使用的佔當前容量百分比
- M:元資料區已使用的佔當前容量百分比
- CCS:壓縮類空間已使用的佔當前容量百分比
- YGC :從應用程式啟動到取樣時年輕代中gc次數
- YGCT :從應用程式啟動到取樣時年輕代中gc所用時間(s)
- FGC :從應用程式啟動到取樣時old代(全gc)gc次數
- FGCT :從應用程式啟動到取樣時old代(全gc)gc所用時間(s)
- GCT:從應用程式啟動到取樣時gc用的總時間(s)
-gccause 顯示垃圾回收的相關資訊
[[email protected]~]# jstat -gccause 3346 #顯示垃圾回收的相關資訊(同-gcutil),同時顯示最後一次或當前正在發生的垃圾回收的誘因
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC
52.97 0.00 46.09 13.92 97.39 98.02 8 0.020 0 0.000 0.020 Allocation Failure No GC
- LGCC:最後一次GC原因
- GCC:當前GC原因(No GC 為當前沒有執行GC)
-printcompilation JVM編譯方法統計
[[email protected] ~]# jstat -printcompilation 3346 #輸出JIT編譯的方法資訊
Compiled Size Type Method
421 60 1 sun/nio/ch/Util$2 clear
- Compiled:編譯任務的數目
- Size:方法生成的位元組碼的大小
- Type:編譯型別
- Method:類名和方法名用來標識編譯的方法。類名使用/做為一個名稱空間分隔符。方法名是給定類中的方法。上述格式是由-XX:+PrintComplation選項進行設定的
「其他文章」
- 使用卷積神經網路實現圖片去摩爾紋
- 核心不中斷前提下,Gaussdb(DWS)記憶體報錯排查方法
- 簡述幾種常用的排序演算法
- 自動調優工具AOE,讓你的模型在昇騰平臺上高效執行
- GaussDB(DWS)運維:導致SQL執行不下推的改寫方案
- 詳解目標檢測模型的評價指標及程式碼實現
- CosineWarmup理論與程式碼實戰
- 淺談DWS函數出參方式
- 程式碼實戰帶你瞭解深度學習中的混合精度訓練
- python進階:帶你學習實時目標跟蹤
- Ascend CL兩種資料預處理的方式:AIPP和DVPP
- 詳解ResNet 網路,如何讓網路變得更“深”了
- 帶你掌握如何檢視並讀懂昇騰平臺的應用日誌
- InstructPix2Pix: 動動嘴皮子,超越PS
- 何為神經網路卷積層?
- 在昇騰平臺上對TensorFlow網路進行效能調優
- 介紹3種ssh遠端連線的方式
- 分散式資料庫架構路線大揭祕
- DBA必備的Mysql知識點:資料型別和運算子
- 5個高併發導致數倉資源類報錯分析