#大数据/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的配置是一个复杂的过程,需要综合考虑应用的需求、硬件资源、性能目标等多个因素。在实际操作中,建议结合官方文档、性能测试结果和社区经验来进行配置和优化。