JVM參數調優基礎-參數的類型詳解

1 參數類型

1.1 標準參數

-help
-server -client
-version -showversion
-cp -classpath

1.2 X 參數

  • 非標準化參數

  • -Xint :解釋執行

  • -Xcomp :第一次使用就編譯成本地代碼

  • -Xmixed :混合模式, JVM自己來決定是否編譯成本地代碼

  • JDK8默認混合模式
    更爲編譯執行

1.3 XX 參數

  • 非標轉化參數,相對不穩定,主要用於JVM調優和Debug

Boolean類型

  • 格式:
    -XX:[±]表示啓用或者禁用name屬性,比如:
    -XX:+ UseConcMarkSweepGC
    -XX:+UseG1GC

非 Boolean類型

  • 格式:
    -XX: <name> = <value>表示name屬性的值是value
    比如:
    -XX:MaxGCPauseMilis=500
    XX:GCTimeRatio=19

注意,-Xmx -Xms不是X參數,而是XX參數
-Xms等價於-XX:InitialHeapSize
-Xmx等價於-XX:MaxHeapSize

2 運行時參數

  • -XX:+ PrintFlagsInitial
  • -XX:+ PrintFlagsFinal
  • -XX: +UnlockExperimentalVMOptions 解鎖實驗參數
  • -XX: + UnlockDiagnosticVMOptions 解鎖診斷參數
  • -XX:+ PrintCommandLineFlags 打印命令行參數

查看XX選項的值

  • -XX:+PrintCommandLineFlags
  • -XX:+PrintFlagsInitial -XX:+PrintFlagsFinal
  • =表示默認值
  • :=被用戶或者JVM修改後的值

jps

jps
jps -l

jinfo

  • 查看最大內存
jinfo -flag MaxHeapSize 1430

-XX:MaxHeapSize=1073741824

  • 查看垃圾收集器
➜  ~ jinfo -flag UseConcMarkSweepGC 1430
-XX:-UseConcMarkSweepGC

  • 查看回收次數閾值
➜  ~ jinfo -flag MaxTenuringThreshold 58064
-XX:MaxTenuringThreshold=15

3 jstat

查看JVM統計信息

3.1 類裝載

3.2 GC

-gc, -gcutil, -gccause, -gcnew, -gcold

-gc輸出結果

S0C、S1C、SOU、 S1∪ : S0和S1的總量與使用量
EC、EU : Eden區總量與使用量
OC、OU : Old區總量與使用量
MC、MU : Metaspace區總量與使用量
CCSC、CCSU :壓縮類空間總量與使用量
YGC、YGCT : YoungGC的次數與時間
FGC、FGCT : FulIGC的次數.與時間
GCT :總的GC時間

JIT 編譯

  • -compiler
  • -printcompilation

4 jmap + MAT 實戰內存溢出

堆區


非堆區



5 導出內存映像文件

OutofMemory(OOM)相關的選項

如果程序發生了OOM後,JVM可以配置一些選項來做些善後工作,比如把內存給dump下來,或者自動採取一些別的動作

  • -XX:+HeapDumpOnOutOfMemoryError
    在內存出現OOM的時候,把Heap轉存(Dump)到文件以便後續分析,文件名通常是java_pid<pid>.hprof
  • -XX:HeapDumpPath=
    指定heap轉存文件的存儲路徑,需要指定的路徑下有足夠的空間來保存轉存文件
  • -XX:OnOutOfMemoryError
    指定一個可行性程序或者腳本的路徑,當發生OOM的時候,去執行這個腳本

內存溢出自動導出

  • -XX:+ HeapDumpOnOutOfMemoryError
  • -XX:HeapDumpPath=./

使用jmap命令手動導出


jmap

option : -heap , -clstats , -dump: , -F

發佈了339 篇原創文章 · 獲贊 238 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章