我們接着上一章節[JVM教程與調優] JVM都有哪些參數類型?的內容繼續講解,這章我們來介紹一下:如何查看JVM運行時參數。這一點十分重要,因為我們在進行JVM參數調優的時候,我們首先得知道目前系統運行的值是什么,然后相應的根據相關參數進行調優。
1.-XX:+PrintFlagsInitial(查看初始值)
2.-XX:+PrinFlagsFinal(查看最終值)
3.-XX:+UnlockExperimentalVMOptions(解鎖實驗參數)
4.-XX:+UnlockDiagnosticVMOptions(解鎖診斷參數)
5.-XX:+PrintCommandLineFlags(打印命令行參數)
PrinFlagsFinal
bool類型 屬性名:UseG1GC 值:false
因此可以看出,並沒有使用G1GC。
InitialHeapSize := 130023424
表示初始堆的值大小。
注意:
=表示默認值
:=被用戶或者JVM修改后的值
演示一下
可以看到有非常多的參數。有興趣的小伙伴可以自己試試。
那么剛才我們看到的參數是哪個進程的呢?
答案是:通過執行java -XX:+PrinFlagsFinal -version
這個命令時的進程參數值。
如果我們要查看一個在運行時的JVM參數值,那么如何查看呢?這就是我們后面講到的jinfo,在此之前,我們先來看一下·jps·。
jps
jps
它就類似於Linux系統中的ps
,也是用來查看系統進程的。不過它是專門用來查看java的進程。接下來我們來簡單演示一下jps
的使用
如何使用?
更多jps
的適用參數命令,可以去這里查看
jinfo
那么我們如何去查看一個正在運行的JVM的參數值呢?
那么用jinfo
就可以了。
再例如,我們如何查看tomcat的最大內存值是多少?那么我們首先得知道命令,然后找到對應的pid。
如圖,其中23789就是tomcat
的進程pid
,查看對內存大小命令:MaxHeapSize
。
可以看到最大堆內存大小為268435456
可以看到我們手動賦值的參數,也可以看到默認有的參數值。
- 查看最大內存
- 查看垃圾回收器
jstat查看JVM統計信息
- 類裝載
- 垃圾收集
- JIT編譯
垃圾回收這塊非常有用,因為我們能夠非常清楚的看到內存結構里面每一塊的大小是如何進行變化的。
命令格式
options:-class,-compiler,-gc,-printcompilation
我們來查看一下jstat文檔。
我們來介紹一下幾個命令。
類裝載
jstat -class 3176 1000 10
后面的1000表示每隔1000ms,10表示一共輸出10次
我們來看一下文檔中是如何介紹-class命令。
分別表示什么含義呢?
- Loaded:類裝載的個數
- Bytes:裝載的kBs數
- Unloaded:卸載的個數
- Bytes:卸載的kBs數
- Time:所花費的裝載和卸載的時間
垃圾收集
命令:-gc、-gcutil、-gccause、-gcnew、-gcold
輸入:jstat -gc 3176 1000 3
同樣,后面表示每隔1000ms,一共打印輸出3次
我們同樣來看一下文檔中的-gc的命令
我們來總結一下-gc輸出結果。
- S0C、S1C、S0U、S1U:S0和S1的總量與使用量
- EC、EU:Eden區總量與使用量
- OC、OU:Old區總量與使用量
- MC、MU:Metaspace區總量與使用量
- CCSC、CCSU:壓縮類空間總量與使用量
- YGC、YGCT:YoungGC的次數與時間
- FGC、FGCT:FullGC的次數與時間
- GCT:總的GC時間
JIT編譯
命令:-compiler、-printcompilation
我們來演示一下JIT編譯。
這些都表示什么含義呢?我們來看一下我們的文檔。
- Compiled:表示完成了多少個編譯任務
- Failed:表示失敗的編譯任務個數
- Invalid:表示無效的編譯任務
- Time:執行編譯任務所花的時間。
- FailedType:上次失敗編譯的編譯類型。
- FailedMethod:上次編譯失敗的類名和方法。
小伙伴可以結合一下上方的演示圖案,來理解一下是什么含義。
大家了解一下就可以,實際工作中作用並不是很大。
以上都是以JDK1.8進行介紹。這里小伙伴們先簡單了解一下這一塊,后續再詳細介紹。小伙伴們可以自己在電腦上嘗試一下使用命令,觀察一下打印結果。
關於JVM參數的命令,在文檔中還有更多的詳細介紹。感興趣的小伙伴,可以自行去查看。
傳送門:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html#BEHHGFAE
下一章,我們將來學習一下JVM的內存結構以及內存溢出。感興趣的小伙伴,可以關注一下~
推薦
文末
文章收錄至
Github: https://github.com/CoderMerlin/coder-programming
Gitee: https://gitee.com/573059382/coder-programming
歡迎關注並star~