FST Off Heap 内存优化

背景

ES 单节点上,倒排索引中的 FST 结构默认常驻堆内内存,占比较高,尤其是在大磁盘的冷节点上,占比可达50%+,制约了单节点管理磁盘的能力,堆内内存受限,影响节点可用性。而在冷节点上,查询请求非常少,FST 常驻内存意义不大,因此我们需要将该部分数据结构移动到堆外管理,默认不加载,需要时从磁盘加载到堆外直接使用,以降低堆内内存使用量,提升单节点磁盘管理能力。

优化方案

基于 WLFU 淘汰策略,实现精准控制的堆外 cache,堆内基于零拷贝、弱引用实现第二级 cache,性能和堆内访问基本持平。

使用方式

开启、关闭 Off Heap 功能(默认关闭)

curl -H "Content-Type:application/json" -XPUT http://localhost:9200/_cluster/settings -d '{
  "persistent" : {
    "indices.segment_memory.off_heap.enable" : true
   }
}'

调整 Off Heap Cache 大小(默认500MB)

curl -H "Content-Type:application/json" -XPUT http://localhost:9210/_cluster/settings -d '{
 "persistent" : {
    "indices.segment_memory.off_heap.size" : "5gb"
  }
}'

可以设置为单节点堆外内存的1/3,最大不要超过32GB。具体示例如下:

  • 单节点总内存(包括 jvm 和堆外内存)共64GB,可以设置为(64-32)/3 = 10GB
  • 单节点总内存(包括 jvm 和堆外内存)共96GB,可以设置为(96-32)/3 = 20GB

优化效果

内存开销、数据管理能力、GC 优势明显,性能持平略有优势。

方案对比FST 存放位置FST 内存占用量单个 FST 堆内存占用量单节点最大磁盘数据量
原生方案堆内内存全量存储在内存中,内存占用量大MB 级别(源生 FST 数据结构)10TB(需调优)
优化方案堆外内存Cache LRU 淘汰冷数据 内存占用量小100Byte左右(Cache Key 大小)50TB
写入性能对比内存使用量(MB)GC 时长(s)TPS90%时延(ms)99%时延(ms)
原生方案402.5920.453198051463.201617.701
优化方案102.21718.969201188455.124618.379
Diff优74.6%优7.26%优1.58%优1.74%劣0.11%
查询性能对比内存使用量(MB)GC 时长(s)QPS90%时延(ms)99%时延(ms)
原生方案401.80620.107200.0573.9606211.1894
优化方案101.00419.228200.0873.8780511.2316
Diff优74.9%优4.37%-优2.00%劣0.3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值