您可以將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日誌進行分析,可以協助開發人員定位和解決以下常見問題。
記憶體泄露:通過分析GC日誌,可以獲得對象的建立和銷毀過程,以及對象在堆記憶體中的分配情況。如果某些對象在使用完之後沒有被正確釋放,就可能導致記憶體泄露。通過分析GC日誌,可以判斷是否存在記憶體泄露問題,找出造成記憶體泄露的原因,並及時修複。
記憶體佔用過高:GC日誌可以顯示應用程式的記憶體使用量情況,包括堆記憶體的使用方式、對象的分布情況等。通過分析GC日誌,可以瞭解到哪些對象佔用了大量的記憶體空間,進而進行記憶體最佳化,減少記憶體的佔用。
GC效能問題:GC日誌可以提供GC的觸發原因、頻率和期間等資訊。通過分析GC日誌,可以瞭解GC的效能情況,包括GC頻率是否過高、GC時間是否過長等。如果GC頻繁或者GC時間過長,都可能影響應用程式效能。通過分析GC日誌,可以找到導致GC效能問題的原因,並進行相應地最佳化。
記憶體回收策略選擇:JVM提供了多種記憶體回收演算法,如標記-清除演算法、複製演算法、標記-整理演算法等。通過分析GC日誌,可以瞭解不同記憶體回收演算法的效能表現,選擇合適的記憶體回收策略,以提高應用程式的效能和穩定性。
資料流說明
GC日誌資料流說明如下圖所示。

操作步驟
在日誌應用地區的智能營運頁簽下,單擊全棧可觀測。
在SLS全棧可觀測頁面,單擊目標執行個體。
在左側導覽列中,單擊全棧監控。
首次在該執行個體中使用效能監控時,還需單擊立即開啟。
在左側導覽列中,單擊資料接入,然後在資料接入配置頁面,找到JVM監控地區的GC日誌分析。
首次建立目標監控項的接入配置時,開啟建立開關,可進入配置頁面。如果您已建立過接入配置,則單擊
表徵圖,可進入配置頁面。建立及選擇機器組。
建立機器組請參見機器組。
在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耗時的類型。
|
GC暫停時間(GC_PAUSE_TIME)
在GC期間中,有一部分處於並髮狀態,此階段不會影響使用者應用,減去並發時間得到的暫停時間,才是影響使用者應用的時間,因此暫停時間更有參考意義。
Label | 說明 |
instance_id | 樣本ID。 |
gc_type | GC演算法。
|
type | GC類型。
|
GC各個子階段花費時間(GC_SUBPHASE_TIME)
Label | 說明 |
instance_id | 樣本ID。 |
gc_type | GC演算法。
|
type | GC類型。
|
subphase | GC子階段名稱。
|
GC耗時(GC_COST_TIME)
Label | 說明 |
instance_id | 樣本ID。 |
gc_type | GC類型。
|
空間
GC回收前記憶體情況(BEFORE_GC_REGION_SIZE)
Label | 說明 |
instance_id | 樣本ID。 |
gc_type | GC類型。
|
type | 各地區名稱。
|
GC 回收後記憶體情況(AFTER_GC_REGION_SIZE)
Label | 說明 |
instance_id | 樣本ID。 |
gc_type | GC類型。
|
type | 各地區名稱。
|
晉陞空間大小(GC_PROMOTION)
Label | 說明 |
instance_id | 樣本ID |
gc_type | GC類型。
|
後續步驟
接入JVM監控資料後,全棧可觀測應用會自動產生專屬儀錶盤。您可以通過儀錶盤分析監控資料。具體操作,請參見查看儀錶盤。