#大數據/ES #經驗 #性能
ES的服務日志出現一些gc overhead現象,經過調優對比,gc發生率顯著下降了85%,分享參數如下:
ES的G1GC參數(多實例)
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:InitiatingHeapOccupancyPercent=40
-XX:+ParallelRefProcEnabled
-XX:+ExplicitGCInvokesConcurrent
-XX:ParallelGCThreads=8
切記!注意行尾不能帶任何空格或者亂七八糟的換行符!
否則可能遇到如下啟動失敗報錯(行尾有空格,沒注意到):
Unrecognized?VM?option?'UseG1GC??'
Did?you?mean?'(+/-)UseG1GC'?
參數介紹:
-
-XX:+UseG1GC
:啟用G1垃圾收集器。 -
-XX:MaxGCPauseMillis=200
:設置最大GC暫停時間為200毫秒。這個值可以根據實際情況進行調整,以實現更好的系統性能。 -
-XX:InitiatingHeapOccupancyPercent=35
:當堆的使用率達到35%時,G1垃圾收集器將啟動混合收集。這個值也可以根據實際情況進行調整。 -
-XX:+ParallelRefProcEnabled
:啟用并行引用處理。 -
-XX:+ExplicitGCInvokesConcurrent
:顯式GC調用并發處理。
G1GC的參數介紹
JVM G1GC(Garbage-First Garbage Collector)是Java虛擬機中的一種垃圾收集器,它以高吞吐量和可預測的停頓時間為目標,特別適合需要大內存和多核處理器的服務器應用。針對G1GC的設置,以下是一些建議的最佳實踐方案:
- 初始堆大小(-Xms)和最大堆大小(-Xmx):
-
根據應用的內存需求設定這兩個值,以確保應用在啟動和運行過程中有足夠的內存資源。
-
通常建議將-Xms和-Xmx設置為相同的值,以減少運行時堆內存的動態調整,從而降低額外的性能開銷。
-
具體數值依賴于應用的具體需求,可以通過性能測試來確定合適的值。
-
- 新生代大小:
-
G1GC中新生代的大小是動態調整的,不需要顯式設置。
-
但可以通過調整
-XX:G1NewSizePercent
(新生代最小占比)和-XX:G1MaxNewSizePercent
(新生代最大占比)來控制新生代大小的上下限。 -
默認情況下,G1GC會根據應用的運行情況自動調整新生代的大小。
-
- 老年代大小:
-
G1GC中老年代的大小也是動態調整的。
-
老年代的大小主要受到總堆大小和新生代大小的影響,不需要顯式設置。
-
- 垃圾收集線程數(-XX:ParallelGCThreads):
-
這個參數設置并行垃圾收集時使用的線程數。
-
默認情況下,G1GC會根據系統的邏輯處理器數量自動調整垃圾收集線程數。
-
通常情況下,不需要手動設置這個參數,除非有特定的性能調優需求。
-
- 其他相關參數:
-
-XX:+UseG1GC
:啟用G1GC垃圾收集器。 -
-XX:MaxGCPauseMillis
:設置G1GC的目標停頓時間,即每次垃圾收集過程中應用線程的最大停頓時間。這個參數對G1GC的性能有很大的影響,需要根據應用的需求和性能測試結果來設定。 -
-XX:InitiatingHeapOccupancyPercent
(簡稱IHOP):設置觸發并發GC周期的Java堆占用的百分比閾值。當老年代的使用率達到這個閾值時,G1GC會觸發一次混合收集(Mixed GC),以清理老年代和新生代的垃圾對象。
-
具體推薦配置值:
由于具體的應用場景和需求差異較大,很難給出適用于所有情況的推薦配置值。建議根據應用的具體需求和性能測試結果來調整上述參數。例如,可以先使用默認配置進行性能測試,然后根據性能測試結果逐步調整-Xmx
、-XX:MaxGCPauseMillis
和-XX:InitiatingHeapOccupancyPercent
等關鍵參數,以達到最佳的性能表現。
G1GC的配置是一個復雜的過程,需要綜合考慮應用的需求、硬件資源、性能目標等多個因素。在實際操作中,建議結合官方文檔、性能測試結果和社區經驗來進行配置和優化。