以下的优化基础是安装的 Elasticsearch 版本为 7.17.7,同时jdk版本为 1.8.321
1、jvm参数优化
这里说的jvm参数调优,是指elasticsearch安装目录下的jvm.options配置,如下图所示:
这里调整的内容主要是调整垃圾回收的收集器,将默认的cms + parNew 垃圾回收器,替换为G1 垃圾回收器。好处是能够尽量缩短处理超大堆的停顿,在G1进行垃圾回收的时候完成内存压缩,降低内存碎片的生成。同时会尝试在满足高吞吐量需求的同时尽可能的缩短停顿时间。整个堆的操作,比如全局标记等,和应用线程并发执行。
注释原有的几个配置项,如下所示:
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=75
-XX:+UseCMSInitiatingOccupancyOnly
新增下述几个优化配置项:
##使用G1垃圾回收器
8:-XX:+UseG1GC
# full gc效率更高
8:-XX:+ExplicitGCInvokesConcurrent
8:-XX:+UseGCOverheadLimit
# 启动并发GC周期时的堆内存占用百分比.
8:-XX:InitiatingHeapOccupancyPercent=40
# 指定STW工作线程的数量:计算公式:ParallelGCThreads = 8 + ((N - 8) * 5/8) = 3 +((5*CPU)/ 8)
8:-XX:ParallelGCThreads=20
# 标记线程的数量
8:-XX:ConcGCThreads=8
# G1为分配担保预留的空间比例 默认10%
8:-XX:G1ReservePercent=15
# 表示每次GC最大的停顿毫秒数,默认200,减少该值会增加系统load。
8:-XX:MaxGCPauseMillis=100
2、Elasticsearch配置优化
新增以下几个配置项():
# 缓存配置
# 分片级请求缓存模块在每个分片上缓存本地结果,默认1%
indices.requests.cache.size: 2%
# 节点查询缓存,默认10%
indices.queries.cache.size: 10%
# 字段数据缓存设置,默认无限制
indices.fielddata.cache.size: 10%
# 字段数据缓存设置断路器,默认50%
indices.breaker.fielddata.limit: 40%
# 恢复配置
# 初始化数据恢复时,并发恢复线程的个数,默认为4
cluster.routing.allocation.node_initial_primaries_recoveries: 6