JDK14效能管理工具:jstat使用介紹
今天我們的系列文章要介紹的是這四個工具:
-
Jstat(sun.tools.jstat) 它的全稱是Java Virtual Machine Statistics Monitoring Tool,是用來監控JVM狀態的工具。
-
jstack(sun.tools.jstack) 它的全稱是Java Stack Trace,是用來做java棧的跟蹤工具。
-
jmap(sun.tools.jmap) 它的全稱是Java Memory Map,是java的記憶體管理工具。
-
jhat (com.sun.tools.hat.Main) 它的全稱是Java Heap Analyse Tool,是java的堆分析工具。
有了這四個工具,基本上JVM執行期間的方方面面都可以被覆蓋到了。下面我們將具體對每一個工具進行詳細講解。本文將會首先講解Jstat的具體使用。
JStat命令
jstat主要對JVM執行期間的各種引數進行收集,包括檢視類的載入情況,jc中新生代老年代後設資料空間的使用情況等。
先看下Jstat的命令:
jstat outputOptions [-t] [-h lines] vmid [interval [count]]
- outputOptions - 選擇需要輸出哪些內容
- t - 在第一列輸出timestamp,是從目標JVM啟動時候開始算起
- h - 選擇每隔n行輸出列的名字,預設是0,表示只在第一行輸出列的名字
- vmid - JVM的pid,可以使用jps來檢視
- interval - jstat輸出的時間間隔預設單位是毫秒
- count - 表示需要展示多少取樣資料,預設是無限制的,表示會一直取樣輸出,直到JVM停止
JStat Output Options
上面我們講了JStat命令的基本格式,在本節我們會詳細講解JStat的輸出選項。
使用jstat -options可以看到jstat支援的幾個options選項:
jstat -options -class-compiler-gc-gccapacity-gccause-gcmetacapacity-gcnew-gcnewcapacity-gcold-gcoldcapacity-gcutil-printcompilation
class
輸出class loader的統計資訊,我們舉個例子:
jstat -class -t 53528 100 5Timestamp Loaded Bytes Unloaded Bytes Time 19822.8 5214 10752.5 0 0.0 2.91 19823.0 5214 10752.5 0 0.0 2.91 19823.0 5214 10752.5 0 0.0 2.91 19823.2 5214 10752.5 0 0.0 2.91 19823.2 5214 10752.5 0 0.0 2.91
上面的例子中53528是目標JVM的pid,100表示取樣的間隔時間是100ms,5表示最後只展示5條資料。
上面的Timestamp表示的JVM的啟動的時間。
- Loaded - 有多少個class被載入
- Bytes - 被載入的class大小
- Unloaded - 多少class被反載入
- Bytes - 反載入的class大小
- Time - 載入和反載入class花費的時間
compiler
compiler統計的是Java HotSpot VM Just-in-Time JIT即時編譯器的資訊。
JIT即時編譯器是為了提升程式碼的執行速度而產生的。JVM對於一些熱點程式碼,比如多次迴圈和經常使用的方法。對於這些熱點程式碼,JIT會將其編譯成機器程式碼,從而提升執行速度。
還是舉剛剛的JVM的例子:
jstat -compiler 53528 100 5Compiled Failed Invalid Time FailedType FailedMethod 2675 0 0 5.35 0 2675 0 0 5.35 0 2675 0 0 5.35 0 2675 0 0 5.35 0 2675 0 0 5.35 0
- Compiled - 執行的編譯任務的次數
- Failed - 編譯任務失敗次數
- Invalid - 置位無效的編譯任務次數
- Time - 執行編譯任務花費的時間
- FailedType - 上一次失敗編譯的編譯型別
- FailedMethod - 上一次編譯失敗的方法名
gc
gc統計的是gc heap資訊
jstat -gc 53528 100 5 S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT CGC CGCT GCT 0.0 4096.0 0.0 3978.2 56320.0 33792.0 15360.0 15215.0 21552.0 20680.9 2688.0 2468.0 4 0.025 0 0.000 2 0.003 0.028 0.0 4096.0 0.0 3978.2 56320.0 33792.0 15360.0 15215.0 21552.0 20680.9 2688.0 2468.0 4 0.025 0 0.000 2 0.003 0.028 0.0 4096.0 0.0 3978.2 56320.0 33792.0 15360.0 15215.0 21552.0 20680.9 2688.0 2468.0 4 0.025 0 0.000 2 0.003 0.028 0.0 4096.0 0.0 3978.2 56320.0 33792.0 15360.0 15215.0 21552.0 20680.9 2688.0 2468.0 4 0.025 0 0.000 2 0.003 0.028 0.0 4096.0 0.0 3978.2 56320.0 33792.0 15360.0 15215.0 21552.0 20680.9 2688.0 2468.0 4 0.025 0 0.000 2 0.003 0.028
gc的輸出引數比較多,我們一一進行解釋,這樣大家對於gc的執行核心會有更多的理解:
- S0C - survivor 0區域的容量,以KB為單位
- S1C - survivor 1區域的容量,以KB為單位
Young Gen被劃分為1個Eden Space和2個Suvivor Space。當物件剛剛被建立的時候,是放在Eden space。垃圾回收的時候,會掃描Eden Space和一個Suvivor Space。如果在垃圾回收的時候發現Eden Space中的物件仍然有效,則會將其複製到另外一個Suvivor Space。
就這樣不斷的掃描,最後經過多次掃描發現任然有效的物件會被放入Old Gen表示其生命週期比較長,可以減少垃圾回收時間。
- S0U - survivor 0區域的使用大小,以KB為單位
- S1U - survivor 1區域的使用大小,以KB為單位
- EC - Eden區域的容量,以KB為單位
- EU - Eden區域的使用,以KB為單位
- OC - old區域的容量,以KB為單位
- OU - old區域的使用,以KB為單位
- MC - Metaspace後設資料區的 Committed Size,以KB為單位
- MU - Metaspace後設資料區的使用大小,以KB為單位
在JDK8之前,類定義、位元組碼和常量等很少會變更的資訊是放在持久代Perm Gen中的。不過在JDK8之後,Perm Gen已經被取消了,現在叫做Metaspace。Metaspace並不在java虛擬機器中,它使用的是本地記憶體。Metaspace可以透過-XX:MaxMetaspaceSize來控制。
- CCSC - Compressed class的Committed Size,以KB為單位
- CCSU - Compressed class的使用大小,以KB為單位
Compressed Class Space,它是和-XX:+UseCompressedOops,-XX:+UseCompressedClassesPointers有關的。實際上是一個指標的壓縮,可以使用32bits來表示之前64bits的指標。
- YGC - young generation的GC次數
- YGCT - young generation的GC時間
- FGC - full GC的次數
- FGCT - full GC的時間
- GCT - 總的GC時間
gccapacity
gccapacity統計的是記憶體池的建立和大小等統計資訊
jstat -gccapacity 53528 100 5 NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC CGC 0.0 716800.0 60416.0 0.0 4096.0 56320.0 0.0 716800.0 15360.0 15360.0 0.0 1069056.0 21552.0 0.0 1048576.0 2688.0 4 0 2 0.0 716800.0 60416.0 0.0 4096.0 56320.0 0.0 716800.0 15360.0 15360.0 0.0 1069056.0 21552.0 0.0 1048576.0 2688.0 4 0 2 0.0 716800.0 60416.0 0.0 4096.0 56320.0 0.0 716800.0 15360.0 15360.0 0.0 1069056.0 21552.0 0.0 1048576.0 2688.0 4 0 2 0.0 716800.0 60416.0 0.0 4096.0 56320.0 0.0 716800.0 15360.0 15360.0 0.0 1069056.0 21552.0 0.0 1048576.0 2688.0 4 0 2 0.0 716800.0 60416.0 0.0 4096.0 56320.0 0.0 716800.0 15360.0 15360.0 0.0 1069056.0 21552.0 0.0 1048576.0 2688.0 4 0 2
- NGCMN - 最小的新生代的大小
- NGCMX - 最大的新生代大小
- NGC - 目前新生代的大小
- S0C - survivor 0區域的容量
- S1C - survivor 1區域的容量
- EC - Eden區域的容量
- OGCMN - 最小old代大小
- OGCMX - 最大old代大小
- OGC - 目前old代大小
- OC - 目前old space大小
- MCMN - 最小metaspace大小
- MCMX - 最大metaspace大小
- MC - Metaspace後設資料區的 Committed Size
- CCSMN - Compressed class空間的最小容量
- CCSMX - Compressed class空間的最大容量
- CCSC - Compressed class的Committed Size
- YGC - young generation的GC次數
- FGC - full GC的次數
gcnew
gcnew表示新生代的統計資訊
jstat -gcnew 53528 100 5 S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT 0.0 4096.0 0.0 3978.2 15 15 5120.0 56320.0 33792.0 4 0.025 0.0 4096.0 0.0 3978.2 15 15 5120.0 56320.0 33792.0 4 0.025 0.0 4096.0 0.0 3978.2 15 15 5120.0 56320.0 33792.0 4 0.025 0.0 4096.0 0.0 3978.2 15 15 5120.0 56320.0 33792.0 4 0.025 0.0 4096.0 0.0 3978.2 15 15 5120.0 56320.0 33792.0 4 0.025
- S0C - survivor 0區域的容量
- S1C - survivor 1區域的容量
- S0U - survivor 0區域的使用大小,以KB為單位
- S1U - survivor 1區域的使用大小,以KB為單位
- TT - Tenuring threshold(進入老年代的閾值?)
- MTT - 最大的Tenuring threshold
- DSS - 所需的survivor size
- EC - Eden區域的容量
- EU - Eden區域的使用,以KB為單位
- YGC - 新生代GC次數
- YGCT - 新生代GC所需的時間
gcnewcapacity
gcnewcapacity統計的是新生代的指標,和gccapacity的結果是很類似的:
jstat -gcnewcapacity 53528 100 5 NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC CGC 0.0 716800.0 60416.0 0.0 0.0 716800.0 4096.0 716800.0 56320.0 4 0 2 0.0 716800.0 60416.0 0.0 0.0 716800.0 4096.0 716800.0 56320.0 4 0 2 0.0 716800.0 60416.0 0.0 0.0 716800.0 4096.0 716800.0 56320.0 4 0 2 0.0 716800.0 60416.0 0.0 0.0 716800.0 4096.0 716800.0 56320.0 4 0 2 0.0 716800.0 60416.0 0.0 0.0 716800.0 4096.0 716800.0 56320.0 4 0 2
- NGCMN - 最小的新生代的大小
- NGCMX - 最大的新生代大小
- NGC - 目前新生代的大小
- S0CMX - survivor 0區域容量的最大值
- S0C - survivor 0區域的容量
- S1CMX - survivor 1區域容量的最大值
- S1C - survivor 1區域的容量
- EC - Eden區域的容量
- ECMX - Eden區域容量的最大值
- YGC - young generation的GC次數
- FGC - full GC的次數
gcold
gcold統計old代的資訊
jstat -gcold 53528 100 5 MC MU CCSC CCSU OC OU YGC FGC FGCT CGC CGCT GCT 21552.0 20680.9 2688.0 2468.0 15360.0 15215.0 4 0 0.000 2 0.003 0.028 21552.0 20680.9 2688.0 2468.0 15360.0 15215.0 4 0 0.000 2 0.003 0.028 21552.0 20680.9 2688.0 2468.0 15360.0 15215.0 4 0 0.000 2 0.003 0.028 21552.0 20680.9 2688.0 2468.0 15360.0 15215.0 4 0 0.000 2 0.003 0.028 21552.0 20680.9 2688.0 2468.0 15360.0 15215.0 4 0 0.000 2 0.003 0.028
結果的幾項指標前面已經介紹過了,這裡就不再重複了
gcoldcapacity
gcoldcapacity表示old代的容量資訊
jstat -gcoldcapacity 53528 100 5 OGCMN OGCMX OGC OC YGC FGC FGCT CGC CGCT GCT 0.0 716800.0 15360.0 15360.0 4 0 0.000 2 0.003 0.028 0.0 716800.0 15360.0 15360.0 4 0 0.000 2 0.003 0.028 0.0 716800.0 15360.0 15360.0 4 0 0.000 2 0.003 0.028 0.0 716800.0 15360.0 15360.0 4 0 0.000 2 0.003 0.028 0.0 716800.0 15360.0 15360.0 4 0 0.000 2 0.003 0.028
gcmetacapacity
gcmetacapacity統計的是後設資料區域的容量資訊
jstat -gcmetacapacity 53528 100 5 MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT CGC CGCT GCT 0.0 1069056.0 21552.0 0.0 1048576.0 2688.0 4 0 0.000 2 0.003 0.028 0.0 1069056.0 21552.0 0.0 1048576.0 2688.0 4 0 0.000 2 0.003 0.028 0.0 1069056.0 21552.0 0.0 1048576.0 2688.0 4 0 0.000 2 0.003 0.028 0.0 1069056.0 21552.0 0.0 1048576.0 2688.0 4 0 0.000 2 0.003 0.028 0.0 1069056.0 21552.0 0.0 1048576.0 2688.0 4 0 0.000 2 0.003 0.028
gcutil
gcutil統計的是GC總體的情況
jstat -gcutil 53528 100 5 S0 S1 E O M CCS YGC YGCT FGC FGCT CGC CGCT GCT 0.00 97.12 60.00 99.06 95.96 91.82 4 0.025 0 0.000 2 0.003 0.028 0.00 97.12 60.00 99.06 95.96 91.82 4 0.025 0 0.000 2 0.003 0.028 0.00 97.12 60.00 99.06 95.96 91.82 4 0.025 0 0.000 2 0.003 0.028 0.00 97.12 60.00 99.06 95.96 91.82 4 0.025 0 0.000 2 0.003 0.028 0.00 97.12 60.00 99.06 95.96 91.82 4 0.025 0 0.000 2 0.003 0.028
- S0 - S0區域的使用比例
- S1 - S1區域的使用比例
- E - Eden區域的使用比例
- O - Old區域的使用比例
- M - 後設資料區域的使用比例
- CCS - Compressed class空間的使用比例
gccause
gccause和gcutil非常相識,只不過多了下面兩列:
- LGCC - 上次GC的原因
- GCC - 當前GC的原因
jstat -gccause 53528 100 5 S0 S1 E O M CCS YGC YGCT FGC FGCT CGC CGCT GCT LGCC GCC 0.00 97.12 60.00 99.06 95.96 91.82 4 0.025 0 0.000 2 0.003 0.028 Metadata GC Threshold No GC 0.00 97.12 60.00 99.06 95.96 91.82 4 0.025 0 0.000 2 0.003 0.028 Metadata GC Threshold No GC 0.00 97.12 60.00 99.06 95.96 91.82 4 0.025 0 0.000 2 0.003 0.028 Metadata GC Threshold No GC 0.00 97.12 60.00 99.06 95.96 91.82 4 0.025 0 0.000 2 0.003 0.028 Metadata GC Threshold No GC 0.00 97.12 60.00 99.06 95.96 91.82 4 0.025 0 0.000 2 0.003 0.028 Metadata GC Threshold No GC
printcompilation
printcompilation是JVM編譯器的方法統計
jstat -printcompilation 53528 100 5Compiled Size Type Method 2675 23 1 jdk/internal/misc/InnocuousThread eraseThreadLocals 2675 23 1 jdk/internal/misc/InnocuousThread eraseThreadLocals 2675 23 1 jdk/internal/misc/InnocuousThread eraseThreadLocals 2675 23 1 jdk/internal/misc/InnocuousThread eraseThreadLocals 2675 23 1 jdk/internal/misc/InnocuousThread eraseThreadLocals
- Compiled - 最近執行的編譯任務次數
- Size - 最近編譯方法的大小
- Type - 最新編譯方法的型別
- Method - 最新編譯方法的名字
總結
本文介紹了JDK14中自帶的jstat JVM分析工具,希望大家能夠在實際的工作中用到。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69961748/viewspace-2701532/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- github原始碼管理工具——使用介紹Github原始碼
- Kafka管理工具介紹Kafka
- 原始碼管理工具——GitHub的介紹和使用原始碼Github
- MongoDB管理工具Rockmongo介紹MongoDB
- pip軟體包管理工具介紹及基本使用
- secrets 管理工具 Vault 的介紹、安裝及使用
- Java基準效能測試--JMH使用介紹Java
- 原始碼管理工具Github介紹原始碼Github
- 原始碼管理工具介紹-github原始碼Github
- 伺服器效能監控神器nmon使用介紹伺服器
- percona-toolkit效能類工具的使用介紹
- [原創]SpotLight效能監控工具使用介紹
- Go 效能壓測工具之wrk介紹與使用Go
- 主流原始碼管理工具Github介紹原始碼Github
- 系統級效能分析工具perf的介紹與使用
- VNC管理工具,Windows系統下VNC管理工具介紹VNCWindows
- 版本管理工具Git(一)簡要介紹Git
- 介紹一款docker管理工具——portainerDockerAI
- [原創]敏捷開發管理工具介紹敏捷
- 程式碼管理工具介紹——Git與GitHubGithub
- C#容器類,效能介紹C#
- javascript效能優化技巧介紹JavaScript優化
- Oracle效能優化--Latch介紹Oracle優化
- Oracle效能優化---鎖介紹Oracle優化
- Github使用介紹Github
- Tmux使用介紹UX
- saltstack使用介紹
- 複製管理工具介紹——高階複製
- puppeteer介紹(一)爬蟲,效能,注入爬蟲
- 效能測試--JMeter 主要元件介紹JMeter元件
- Oracle SQL效能優化系列介紹OracleSQL優化
- Kubernetes-17:Kubernets包管理工具—>Helm介紹與使用
- 簡單介紹.Net效能測試框架Crank的使用方法框架
- Redis介紹和使用Redis
- ChatGPT API使用介紹ChatGPTAPI
- ViewStub--使用介紹View
- 軟體介紹使用
- Github for Windows使用介紹GithubWindows