tencent cloud

文档反馈

FST Off Heap 内存优化

最后更新时间:2021-05-18 16:02:49

    背景

    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) TPS 90%时延(ms) 99%时延(ms)
    原生方案 402.59 20.453 198051 463.201 617.701
    优化方案 102.217 18.969 201188 455.124 618.379
    Diff 优74.6% 优7.26% 优1.58% 优1.74% 劣0.11%
    查询性能对比 内存使用量(MB) GC 时长(s) QPS 90%时延(ms) 99%时延(ms)
    原生方案 401.806 20.107 200.057 3.96062 11.1894
    优化方案 101.004 19.228 200.087 3.87805 11.2316
    Diff 优74.9% 优4.37% - 优2.00% 劣0.38%

    支持版本

    6.8.2、7.5.1、7.10.1

    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持