全部產品
Search
文件中心

:接入JVM監控資料

更新時間:May 17, 2025

您可以將GC(Garbage Collection)日誌接入到全棧可觀測應用中,進行可視化展示。

重要

目前該功能處於維護狀態,推薦接入ARMS應用即時監控服務

前提條件

  • 已建立全棧可觀測執行個體。具體操作,請參見建立執行個體

  • 已在Java進程中設定GC日誌採集參數,且將GC日誌採集到檔案中。參數說明如下:

    • JDK8參數說明

    -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -Xloggc:gc-%p.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=100M 

    參數

    是否必選

    參數說明

    -XX:+PrintGCDetails

    用於列印詳細的垃圾收集日誌。

    -XX:+PrintGCDateStamps

    用於在垃圾收集日誌中列印日期時間戳記。

    啟用該參數後,JVM會在每條垃圾收集日誌中列印日期和時間資訊。該資訊可用於分析垃圾收集日誌的時序性,協助開發人員更好地理解垃圾收集的行為和效果。

    該參數通常與其他垃圾收集日誌相關的參數一起使用,例如-XX:+PrintGCDetails-XX:+PrintGCTimeStamps,以提供更全面的垃圾收集日誌 。

    -XX:+PrintGCTimeStamps

    用於在垃圾收集日誌中列印時間戳記。

    啟用該參數後,JVM會在每條垃圾收集日誌中列印時間戳記資訊,包括垃圾收集的開始時間和結束時間。該資訊可用於分析垃圾收集的時序性和效能,協助開發人員更好地理解應用程式的垃圾收集行為,並進行效能最佳化。

    該參數通常與其他垃圾收集日誌相關的參數一起使用,例如-XX:+PrintGCDetails-XX:+PrintGCDateStamps,以提供更全面的垃圾收集日誌。

    -Xloggc

    用於將垃圾收集日誌輸出到指定檔案中。格式為-Xloggc:gc-%p.log,其中gc-%p.log為檔案路徑。

    在JDK8中,-Xloggc參數仍然有效,用法仍為-Xloggc:gc-%p.log。該參數通常與其他垃圾收集日誌相關的參數一起使用,例如-XX:+PrintGCDetails-XX:+PrintGCTimeStamps,以提供更全面的垃圾收集日誌資訊。

    -XX:+UseGCLogFileRotation

    否(建議添加)

    用於啟用垃圾收集記錄檔的輪轉功能。

    啟用該參數後,JVM會自動對垃圾收集記錄檔進行輪轉,即達到一定大小或時間間隔後,會自動建立一個新的記錄檔,同時保留舊的記錄檔。這樣可以避免垃圾收集記錄檔過大,佔用過多磁碟空間,也便於開發人員進行記錄檔的管理和分析。

    該參數通常與其他垃圾收集日誌相關的參數一起使用,例如-XX:GCLogFileSize-XX:GCLogFileSize等,以控制記錄檔的輪轉條件和策略。

    -XX:NumberOfGCLogFiles

    否(建議添加)

    用於設定垃圾收集記錄檔輪轉時保留的檔案數量。

    設定該參數後,JVM會根據該參數值保留指定數量的垃圾收集記錄檔,超過數量後會刪除最舊的記錄檔。通過該參數可避免過多的記錄檔佔用磁碟空間。

    該參數通常與-XX:+UseGCLogFileRotation參數一起使用,以控制垃圾收集記錄檔的輪轉行為。

    -XX:GCLogFileSize

    否(建議添加)

    用於設定垃圾收集記錄檔大小。

    設定該參數後,JVM會根據該參數值控制每個垃圾收集記錄檔的大小,一旦達到設定的檔案大小,JVM會自動建立一個新的檔案,同時保留舊檔案。通過該參數可避免過多的記錄檔佔用磁碟空間。

    該參數通常與-XX:+UseGCLogFileRotation參數一起使用,以控制垃圾收集記錄檔的輪轉行為。

    • JDK11參數說明:

      在JDK11中,上邊的其餘參數全部不可用,只保留-Xloggc。JDK11引入了新的垃圾收集日誌系統,稱為統一日誌系統(Unified Logging)。即在JDK11中,您可以使用-Xlog:gc*:file來替代-Xloggc:。該方式提供了更多的靈活性和功能,可以更精確地控制日誌的輸出格式和層級。

      -Xlog:gc*:file=gc-%p-%t.log:time,pid:filecount=5,filesize=10M
      說明

      %t是時間,%p是pid,filecount是輪轉數量,filesize是檔案大小。

背景資訊

當開發人員遇到Java應用程式效能問題時,JVM GC日誌分析是解決問題的重要步驟之一。GC日誌提供了關於記憶體回收的詳細資料,包括GC觸發的原因、GC類型、GC期間以及被回收的對象數量等。通過對GC日誌進行分析,可以協助開發人員定位和解決以下常見問題。

  1. 記憶體泄露:通過分析GC日誌,可以獲得對象的建立和銷毀過程,以及對象在堆記憶體中的分配情況。如果某些對象在使用完之後沒有被正確釋放,就可能導致記憶體泄露。通過分析GC日誌,可以判斷是否存在記憶體泄露問題,找出造成記憶體泄露的原因,並及時修複。

  2. 記憶體佔用過高:GC日誌可以顯示應用程式的記憶體使用量情況,包括堆記憶體的使用方式、對象的分布情況等。通過分析GC日誌,可以瞭解到哪些對象佔用了大量的記憶體空間,進而進行記憶體最佳化,減少記憶體的佔用。

  3. GC效能問題:GC日誌可以提供GC的觸發原因、頻率和期間等資訊。通過分析GC日誌,可以瞭解GC的效能情況,包括GC頻率是否過高、GC時間是否過長等。如果GC頻繁或者GC時間過長,都可能影響應用程式效能。通過分析GC日誌,可以找到導致GC效能問題的原因,並進行相應地最佳化。

  4. 記憶體回收策略選擇:JVM提供了多種記憶體回收演算法,如標記-清除演算法、複製演算法、標記-整理演算法等。通過分析GC日誌,可以瞭解不同記憶體回收演算法的效能表現,選擇合適的記憶體回收策略,以提高應用程式的效能和穩定性。

資料流說明

GC日誌資料流說明如下圖所示。

image.png

操作步驟

  1. 登入Log Service控制台

  2. 日誌應用地區的智能營運頁簽下,單擊全棧可觀測

  3. SLS全棧可觀測頁面,單擊目標執行個體。

  4. 在左側導覽列中,單擊全棧監控

    首次在該執行個體中使用效能監控時,還需單擊立即開啟

  5. 在左側導覽列中,單擊資料接入,然後在資料接入配置頁面,找到JVM監控地區的GC日誌分析

    首次建立目標監控項的接入配置時,開啟建立開關,可進入配置頁面。如果您已建立過接入配置,則單擊建立表徵圖,可進入配置頁面。

  6. 建立及選擇機器組。

    建立機器組請參見機器組

  7. Logtail配置中,完成如下配置,然後單擊下一步

    Logtail採集配置詳情請參見管理Logtail採集配置

    設定完成後,Simple Log Service將自動產生Metricstore等資產。更多資訊,請參見資產說明

GC指標列表

重要

下述的GC指標是通過Log ServiceScheduleSQL產生的。

GC指標主要分為時間和空間兩個大維度。

  • 時間維度:在每次GC過程中,每一階段所花費的時間以及總體時間。

  • 空間維度:每次GC前後的各個地區的空間大小以及各個地區空間晉陞的變化情況。

時間

GC線程在CPU上佔用的時間(GC_CPU_USED)

Label

說明

instance_id

樣本ID。

gc_type

GC類型,例如G1、CMS、ZGC 等。

type

GC耗時的類型。

  • USER:處於使用者態的時間。

  • SYS:處於核心態的時間,包括IO阻塞的時間。

  • REAL:真實執行時間。

GC暫停時間(GC_PAUSE_TIME)

在GC期間中,有一部分處於並髮狀態,此階段不會影響使用者應用,減去並發時間得到的暫停時間,才是影響使用者應用的時間,因此暫停時間更有參考意義。

Label

說明

instance_id

樣本ID。

gc_type

GC演算法。

  • Serial GC

  • Parallel GC

  • ZGC

  • Generational ZGC

  • Shenandoah GC

  • Generational Shenandoah GC

  • G1 GC

  • CMS GC

type

GC類型。

  • Young GC

  • Mixed GC

  • Full GC

  • Concurrent Mark Cycle

  • Concurrent Undo Cycle

  • CMS

  • Garbage Collection

GC各個子階段花費時間(GC_SUBPHASE_TIME)

Label

說明

instance_id

樣本ID。

gc_type

GC演算法。

  • Serial GC

  • Parallel GC

  • ZGC

  • Generational ZGC

  • Shenandoah GC

  • Generational Shenandoah GC

  • G1 GC

  • CMS GC

type

GC類型。

  • Young GC

  • Mixed GC

  • Full GC

  • Concurrent Mark Cycle

  • Concurrent Undo Cycle

  • CMS

  • Garbage Collection

subphase

GC子階段名稱。

  • CMS GC重要階段

    • Concurrent Mark

    • Final Remark

  • CMS GC所有階段

    • Initial Mark

    • Concurrent Preclean

    • Concurrent Abortable preclean

    • Concurrent Mark

    • Final Remark

    • Concurrent Sweep

    • Concurrent Reset

    • Concurrent Mode Interrupted

    • Concurrent Mode Failure

    • Rescan

    • Class unloading

    • Scrub Symbol Table

    • Scrub String Table

  • G1重要階段

    • Concurrent Mark

    • Concurrent Mark From Roots

    • Pause Remark

    • Object Copy

  • G1 GC所有階段

    • Concurrent Clear Claimed Marks

    • Root Region Scanning

    • Concurrent Mark From Roots

    • Concurrent Preclean

    • Concurrent Mark

    • Concurrent Mark Reset For Overflow

    • Pause Remark

    • Concurrent Rebuild Remembered Sets

    • Pause Cleanup

    • Concurrent Cleanup

    • Finalize Marking

    • Class Unloading

    • Reference Processing

    • Concurrent Mark Abort

    • Mark Live Objects

    • Prepare for Compaction

    • Adjust Pointers

    • Compact Heap

    • Ext Root Scanning

    • Update Remember Set

    • Scan Remember Set

    • Code Root Scanning

    • Object Copy

    • Termination

    • Code Root Fixup

    • Code Root Purge

    • Clear Card Table

    • Choose Collection Set

    • Evacuation Failure

    • Ref Enq

    • Redirty Cards

    • Humongous Register

    • Humongous Reclaim

    • Free Collection Set

GC耗時(GC_COST_TIME)

Label

說明

instance_id

樣本ID。

gc_type

GC類型。

  • Serial GC

  • Parallel GC

  • ZGC

  • Generational ZGC

  • Shenandoah GC

  • Generational Shenandoah GC

  • G1 GC

  • CMS GC

空間

GC回收前記憶體情況(BEFORE_GC_REGION_SIZE)

Label

說明

instance_id

樣本ID。

gc_type

GC類型。

  • Serial GC

  • Parallel GC

  • ZGC

  • Generational ZGC

  • Shenandoah GC

  • Generational Shenandoah GC

  • G1 GC

  • CMS GC

type

各地區名稱。

  • Young

  • Old

  • Humongous

  • Heap

  • Metaspace

GC 回收後記憶體情況(AFTER_GC_REGION_SIZE)

Label

說明

instance_id

樣本ID。

gc_type

GC類型。

  • Serial GC

  • Parallel GC

  • ZGC

  • Generational ZGC

  • Shenandoah GC

  • Generational Shenandoah GC

  • G1 GC

  • CMS GC

type

各地區名稱。

  • Young

  • Old

  • Humongous

  • Heap

  • Metaspace

晉陞空間大小(GC_PROMOTION)

Label

說明

instance_id

樣本ID

gc_type

GC類型。

  • Serial GC

  • Parallel GC

  • ZGC

  • Generational ZGC

  • Shenandoah GC

  • Generational Shenandoah GC

  • G1 GC

  • CMS GC

後續步驟

接入JVM監控資料後,全棧可觀測應用會自動產生專屬儀錶盤。您可以通過儀錶盤分析監控資料。具體操作,請參見查看儀錶盤