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

相关推荐
雨中飘荡的记忆2 小时前
LangChain4j 实战指南
java·langchain
okseekw2 小时前
Java 中的方法:从定义到重载的完整指南
java
雨中飘荡的记忆2 小时前
深入理解设计模式之适配器模式
java·设计模式
用户84913717547162 小时前
生产级故障排查实战:从制造 OOM 到 IDEA Profiler 深度破案
java·jvm
越努力越幸运5082 小时前
git工具的学习
大数据·elasticsearch·搜索引擎
雨中飘荡的记忆2 小时前
深入理解设计模式之装饰者模式
java·设计模式
不会写程序的未来程序员2 小时前
详细的 Git 操作分步指南
大数据·git·elasticsearch
雨中飘荡的记忆2 小时前
秒杀系统设计与实现
java·redis·lua
CryptoPP2 小时前
使用 KLineChart 这个轻量级的前端图表库
服务器·开发语言·前端·windows·后端·golang
18你磊哥2 小时前
chromedriver.exe的使用和python基本处理
开发语言·python