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

相关推荐
桦说编程13 分钟前
Java 中如何创建不可变类型
java·后端·函数式编程
lifallen14 分钟前
Java Stream sort算子实现:SortedOps
java·开发语言
IT毕设实战小研16 分钟前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
CCCC13101631 小时前
嵌入式学习(day 28)线程
jvm·学习
没有bug.的程序员1 小时前
JVM 总览与运行原理:深入Java虚拟机的核心引擎
java·jvm·python·虚拟机
甄超锋1 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
cui__OaO2 小时前
Linux软件编程--线程
linux·开发语言·线程·互斥锁·死锁·信号量·嵌入式学习
阿华的代码王国2 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
Zyy~2 小时前
《设计模式》装饰模式
java·设计模式
A尘埃2 小时前
企业级Java项目和大模型结合场景(智能客服系统:电商、金融、政务、企业)
java·金融·政务·智能客服系统