VisualVM使用


VisualVM是JDK自帶的一個用於Java程序性能分析的工具

在JDK安裝目錄的bin文件夾下名稱為 jvisualvm.exe

 在左側選擇應用

(1)概述

 應用程序和運行時環境的基本信息

基本參數

PID:應用程序的進程ID
主機:應用程序運行的系統地址
主類:運行了main方法的類
參數:應用啟動時所傳遞的參數信息
JVM:當前的JVM信息
Java:當前使用的JDK信息
Java Home:JDK的位置
JVM標志:啟動JDK時JVM使用的的標志
出現OOME時生產堆dump:當前出現OOME時生產堆dump功能的開啟/禁用狀態

保存的數據

  顯示VisualVM存儲的當前應用程序的信息

詳細信息

  JVM參數:配置的JVM啟動的參數信息

  系統屬性 :JVM運行的系統屬性

(2)監視

  展示監聽的當前應用程序的整體情況

 CPU:CPU的使用百分比

內存:內存的占用情況,包括內存大小、最大值和已經使用的大小

  堆:堆內存的大小和堆內存使用情況

  Metaspace:元空間內存的使用情況

類:顯示了已經加載的類數量和共享類的數量

線程:顯示了應用程序在JVM中生存和守護線程的數量

堆dump:執行堆dump,在新的標簽頁打開,查看dump的詳細信息

(3)線程

展示了應用程序的線程數據,包括所有線程數、活動線程數、完成線程數

 線程dump:執行線程dump,在新標簽頁打開結果

(4)抽樣器

  抽取CPU和內存的樣例數據

  設置——設置抽樣參數

   CPU抽樣:

    CPU樣例:展示了方法級別CPU性能(執行的時間及占比)
    線程CPU時間:反映了線程執行占用cpu的時間和占比

   內存抽樣

    堆柱狀圖:展示了內存占用情況

    每個線程分配:展示了每個線程分配的內存以及占比

 

(5)Profile

  啟動和停止本地應用程序的概要分析會話

   CPU:點CPU按鈕,啟動一個 CPU性能分析會話 ,顯示 CPU 的使用率、方法的執行效率和頻率等相關數據

   內存:點擊“內存”按鈕將啟動一個內存分析會話,等 VisualVM 收集和統計完相關性能數據信息,將會顯示在性能分析結果

 

 (6)Visual GC

安裝插件

工具——》插件

 就會出現Visual CG 的標簽

   Spaces:分為 Perm(Permanent Generation) 永久代,  Old 老年代和新生代

     A.永久代

      通過VM Args設置,eg:

        -XX:PermSize=1024m   (初始值

        -XX:MaxPermSize=1024m (最大值

    B.java堆(java heap)——Old 老年代+新生代

      通過VM Args設置,eg:

        -xms2048m (初始堆內存

        -Xmx2048m (最大堆內存

        -XX:+HeapDumpOnOutofMemoryError (內存異常打印dump

        -Xmn800m  (新生代內存

        -XX:SurvivorRatio=8 (新生代內存分配比例(8:1:1)

        因為Heap分為新生代跟老年代,所以2018M-800M=1218M,老年代就是1218M(初始內存跟最大內存最好相等,防止內存不夠時擴充內存或者Full GC,導致性能降低)

      新生代:Eden 區+S0 survivor 區+S1 survivor 區,默認是8:1分配內存

   Graphs:以時間為橫坐標的狀態面板

    Compile Time:編譯時間表示虛擬機的 JIT 編譯器編譯熱點代碼的耗時

    Class Loader Time: class 的 load 和 unload 時間

    GC Time:

       18 collections ——自監視以來共 22 次GC, 包括 Minor GC 和 Full GC

      456.653ms 表示 gc 共花費了456.653ms      Last Cause: Allocation Failure 上次發生 gc 的原因為內存分配失敗

    Eden Space:

       Eden Space (1.328G,204.000M): 128.430M——Eden Space 最大可分配空間  340.500M,當前分配空間 185.000M,當前占用空間 91.012M

      14 collections, 153.307ms——當前新生代發生 GC 的次數為14次, 共占用時間 153.307ms

    Survivor 0,Survivor 1:

     S0 和 S1 有一個是空閑的,這樣方便執行 minor GC,他們的最大分配空間是相同的,在 minor GC 時,S0 和S1 會互相切換

     Survivor 1 (453.500M, 33.500M) : 3.814M——S1 最大分配空間 453.500M, 當前分配空間33.500M, 已占用空間3.814M

    Old Gen:

Old Gen (2.659G, 370.000M) :50.940M—— OldGen最大分配空間2.659G, 當前空間370.000M, 已占用空間50.940M

4 collections, 306.346ms ——老年代發生了 4次 GC, 耗費了306.346ms的時間

老年代 GC 也叫做 Full GC, 在老年代 GC 時會伴隨着 Minor GC

    Metaspace:

     Perm Gen (1.096G, 109.375M) : 106.630M——最大可用空間1.096G,當前永久代空間109.375M,已占用空間106.630M

注:

  如果顯示指定-XX:+UseParallelGC --新生代並行、老年代串行收集器 ,histogram柱狀圖會不支持當前收集器

 


免責聲明!

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



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