基於JDK命令行工具的Java性能監控

一. JVM的參數類型

1. 標準參數

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

2. 非標準化參數 (X參數)

  • -Xint:解釋執行 java -Xint version
  • -Xcomp:第一次使用就編譯成本地代碼  java -Xcomp version
  • -Xmixed:混合模式,JVM自己來決定是否編譯成本地代碼

3. XX參數

  • 非標準化參數
  • 相對不穩定
  • 主要用於JVM調優和Debug
  • 參數分類:
    • Boolean 類型 格式 -XX:[+-]<name>表示啓用或禁用name屬性,例如:-XX:+UseG1GC
    • 非Boolean類型 格式:-XX:<name>=<value> 表示name的屬性值是value,例如-XX:MaxGCPauseMillis=500
    • -Xmx -Xms 不是X參數,而是XX參數:-Xms等價於-XX:InitialHeapSize -Xmx等價於-XX:MaxHeapSize

二. 查看JVM運行時參數

1. -XX:+PrintFlagslnitial(可設置參數的初始值)  顯示的參數如果是:=則表示是修改過的,=則表示是默認值

2. -XX:PrintFlagsFinal

3. -XX:UnlockExperimentalVMOptions解鎖實驗參數(先決條件)

4. -XX:+UnlockDiagnosticVMOptions解鎖診斷參數

5. -XX:+PrintCommandLineFlags打印命令行參數

6. -Xms -Xmx 堆的容量

7. -XX:NewSize -XX:MaxNewSize 新生代的大小

8. -XX:NewRatio  設置Yong 和 Old的比例   

9. -XX:SurvivorRatio 設置兩個Survivor區和Eden的比

10. -XX:MetaspaceSize -XX:MaxMetaspaceSize metaspace 大小 (下面的參數都是小弟,主要調整老大即可,容量大了,下面的也會變大)

11. -XX:+UseCompressedClassPointers 使用壓縮短指針

12. -XX:CompressedClassSpaceSize 默認1G 可以設置

13. -XX:InitialCodeCacheSize  codeCache 最小值

14. -XX:ReservedCodeCacheSize codeCache 最大值

15. -XX:StringTableSize=99991  調整String Pool的大小

16. 查詢運行的JVM中的參數

  • jinfo -flag MaxHeapSize [pid] 查看最大內存
  • jinfo -flags 23789 顯示 Non-default VM flags

三. jstat查看JVM統計信息

1. 查看的信息

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

2. 命令格式

  • jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
  • options:-class,-compiler,-gc,-printcompilation
  • 垃圾收集 -gc、-gcutil、-gccause、-gcnew、-gcold
    • S0C、S1C、S0U、S1U:S0和S1的總量與使用量(S0 和S1 只會啓用一個,未啓用的會是0)
    • EC、EU eden區總量與使用量
    • OC、OU:Old區總量與使用量
    • MC、MU:Metaspace區總量與使用量
    • CCSC、CCSU:壓縮類空間總量與使用量
    • YGC、YGCT:YoungGC的次數與時間
    • FGC、FGCT:FullGC的次數與時間
    • GCT:總的GC時間
  • JIT編譯
    • -compiler   
    • -printcompilation(method compiler)

四. 導出內存映像文件

1. 內存溢出自動導出(內存很大的時候,可能會導不出來)

  • -XX:+HeapDumpOnOutOfMemoryError
  • -XX:HeapDumpPath=./ (路徑)

2. 使用jmap命令手動導出,使用MAT工具分析

  • jmap -dump:format=b,file=heap.hprof [pid]

五. MAT分析內存溢出

1. Histogram 查看對象數量  

  • shallow heap 不包含內部對象字節
  • 查看GC root 引用,右鍵 Merge short path to GC ROOT ==>exclude All xxxx 只看強引用

2. dominator_tree 查看對象佔的字節數

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章