降低85%的gc发生率:ES的GC调优实践!

#大数据/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的设置,以下是一些建议的最佳实践方案:

  1. 初始堆大小(-Xms)和最大堆大小(-Xmx)

    • 根据应用的内存需求设定这两个值,以确保应用在启动和运行过程中有足够的内存资源。

    • 通常建议将-Xms和-Xmx设置为相同的值,以减少运行时堆内存的动态调整,从而降低额外的性能开销。

    • 具体数值依赖于应用的具体需求,可以通过性能测试来确定合适的值。

  2. 新生代大小

    • G1GC中新生代的大小是动态调整的,不需要显式设置。

    • 但可以通过调整-XX:G1NewSizePercent(新生代最小占比)和-XX:G1MaxNewSizePercent(新生代最大占比)来控制新生代大小的上下限。

    • 默认情况下,G1GC会根据应用的运行情况自动调整新生代的大小。

  3. 老年代大小

    • G1GC中老年代的大小也是动态调整的。

    • 老年代的大小主要受到总堆大小和新生代大小的影响,不需要显式设置。

  4. 垃圾收集线程数(-XX:ParallelGCThreads)

    • 这个参数设置并行垃圾收集时使用的线程数。

    • 默认情况下,G1GC会根据系统的逻辑处理器数量自动调整垃圾收集线程数。

    • 通常情况下,不需要手动设置这个参数,除非有特定的性能调优需求。

  5. 其他相关参数

    • -XX:+UseG1GC:启用G1GC垃圾收集器。

    • -XX:MaxGCPauseMillis:设置G1GC的目标停顿时间,即每次垃圾收集过程中应用线程的最大停顿时间。这个参数对G1GC的性能有很大的影响,需要根据应用的需求和性能测试结果来设定。

    • -XX:InitiatingHeapOccupancyPercent(简称IHOP):设置触发并发GC周期的Java堆占用的百分比阈值。当老年代的使用率达到这个阈值时,G1GC会触发一次混合收集(Mixed GC),以清理老年代和新生代的垃圾对象。

具体推荐配置值

由于具体的应用场景和需求差异较大,很难给出适用于所有情况的推荐配置值。建议根据应用的具体需求和性能测试结果来调整上述参数。例如,可以先使用默认配置进行性能测试,然后根据性能测试结果逐步调整-Xmx-XX:MaxGCPauseMillis-XX:InitiatingHeapOccupancyPercent等关键参数,以达到最佳的性能表现。

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

相关推荐
Algorithm15769 分钟前
云原生相关的 Go 语言工程师技术路线(含博客网址导航)
开发语言·云原生·golang
喝醉酒的小白12 分钟前
Elasticsearch相关知识@1
大数据·elasticsearch·搜索引擎
shinelord明18 分钟前
【再谈设计模式】享元模式~对象共享的优化妙手
开发语言·数据结构·算法·设计模式·软件工程
新手小袁_J24 分钟前
JDK11下载安装和配置超详细过程
java·spring cloud·jdk·maven·mybatis·jdk11
呆呆小雅24 分钟前
C#关键字volatile
java·redis·c#
Monly2125 分钟前
Java(若依):修改Tomcat的版本
java·开发语言·tomcat
boligongzhu26 分钟前
DALSA工业相机SDK二次开发(图像采集及保存)C#版
开发语言·c#·dalsa
Eric.Lee202126 分钟前
moviepy将图片序列制作成视频并加载字幕 - python 实现
开发语言·python·音视频·moviepy·字幕视频合成·图像制作为视频
Ttang2327 分钟前
Tomcat原理(6)——tomcat完整实现
java·tomcat
7yewh28 分钟前
嵌入式Linux QT+OpenCV基于人脸识别的考勤系统 项目
linux·开发语言·arm开发·驱动开发·qt·opencv·嵌入式linux