[JVM教程與調優] 什么是JVM運行時參數?


什么是JVM運行時參數?

我們接着上一章節[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使用

更多jps的適用參數命令,可以去這里查看
jps的命令使用地址

jinfo

那么我們如何去查看一個正在運行的JVM的參數值呢?
那么用jinfo就可以了。

jinfo使用

再例如,我們如何查看tomcat的最大內存值是多少?那么我們首先得知道命令,然后找到對應的pid。

jinfo使用舉例

如圖,其中23789就是tomcat的進程pid,查看對內存大小命令:MaxHeapSize
可以看到最大堆內存大小為268435456

jinfo使用舉例2

可以看到我們手動賦值的參數,也可以看到默認有的參數值。

  • 查看最大內存

查看最大內存

  • 查看垃圾回收器

查看垃圾回收器

jstat查看JVM統計信息

  • 類裝載
  • 垃圾收集
  • JIT編譯

垃圾回收這塊非常有用,因為我們能夠非常清楚的看到內存結構里面每一塊的大小是如何進行變化的。

命令格式

命令格式

options:-class,-compiler,-gc,-printcompilation

我們來查看一下jstat文檔。

jstat文檔

我們來介紹一下幾個命令。

類裝載

類裝載命令演示

jstat -class 3176 1000 10

后面的1000表示每隔1000ms,10表示一共輸出10次

我們來看一下文檔中是如何介紹-class命令。

-class命令

分別表示什么含義呢?

  • Loaded:類裝載的個數
  • Bytes:裝載的kBs數
  • Unloaded:卸載的個數
  • Bytes:卸載的kBs數
  • Time:所花費的裝載和卸載的時間

垃圾收集

命令:-gc、-gcutil、-gccause、-gcnew、-gcold
垃圾收集

輸入:jstat -gc 3176 1000 3

同樣,后面表示每隔1000ms,一共打印輸出3次

我們同樣來看一下文檔中的-gc的命令

-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編譯。

JIT編譯演示

這些都表示什么含義呢?我們來看一下我們的文檔。

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~

微信公眾號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM