Elasticsearch内存

核心概念

  1. 基于Lucene
  2. Java应用

内存使用分析

Lucene的内存消耗

  1. 倒排索引。(堆内存)
    Lucene中,索引是存储在磁盘中,一个索引(Index)由多个段(Segment)组成。当启动IndexSearcher时,会把倒排索引加载到内存中,基于不同的数据类型生成不同的词典,比如text生成FST结构的词典,数值类型生成Bkd tree。
  2. Doc Values(操作系统缓存)
    当Doc Values占用的内存小于可用内存时,会加载到内存中,否则会放到page cache中。

Elasticsearch内存

  1. 基本的元数据(堆内存)
    包括node的元数据和Cluster的元数据,还有内部的一些其他服务,比如线程池,线程队列等等。

  2. field data cache(堆内存)
    用于对分词字段进行排序或聚合。使用过程中会将所有字段的值加载到内存中,而且构建缓存的代价很高。在正常使用的过程中,不建议使用这个字段进行聚合或者排序,错误的使用很容易造成OOM。
    请注意,默认的_id这个字段就是text,对他进行排序时会使用fielddata cache

  3. Node Query Cache(堆内存)
    每个节点的查询缓存,以段为基本单元,详情查看我的另外一篇文章

  4. Shard Request Cache(堆内存)
    Shard级别的缓存。主要用于缓存size=0的请求,aggs和suggestions,还有就是hits.total。

  5. Indexing Buffer(堆内存)
    用于缓存新索引的数据,当空间填满之后,会将数据写到磁盘上成为一个新的段。

  6. 聚合操作(堆内存)
    聚合会根据需求构建不同的bucket,对单个字段进行聚合可能产生固定数量的bucket,但是某些场景下,比如深层嵌套聚合,或者单个字段不同值过多,都有可能导致生成大量的bucket而OOM。具体可参考


 

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch是一种分布式搜索和分析引擎,它需要大量的内存来支持其高效的搜索和数据分析功能。因此,在部署Elasticsearch时,正确配置内存分配是非常重要的。下面是关于Elasticsearch内存分配设置的详细解释。 1. 堆内存分配 Elasticsearch使用Java编写,因此它的内存分配主要是通过Java虚拟机(JVM)来控制的。其中,堆内存Elasticsearch最重要的内存分配之一。堆内存用于存储Elasticsearch的数据缓存和搜索缓存。默认情况下,Elasticsearch会将堆内存的大小设置为1GB。但是,这可能不足以支持大型数据集和高流量负载。因此,建议将堆内存大小设置为物理内存的一半,最大不超过32GB。 可以通过在elasticsearch.yml文件中添加以下行来修改堆内存大小: ``` -Xms4g -Xmx4g ``` 其中,“-Xms”代表Elasticsearch的初始堆内存分配,“-Xmx”代表Elasticsearch的最大堆内存分配。在上面的示例中,堆内存大小被设置为4GB。 2. 分片内存分配 Elasticsearch的数据分片也需要内存来存储和搜索数据。默认情况下,每个分片被分配256MB的内存。但是,对于大型数据集和高流量负载,可能需要更多的内存来支持分片。建议将每个分片的内存大小设置为物理内存的1/4到1/2。 可以通过在elasticsearch.yml文件中添加以下行来修改每个分片的内存大小: ``` indices.memory.index_buffer_size: 50% ``` 在上面的示例中,每个分片被分配了50%的索引缓冲区内存。 3. 非堆内存分配 除了堆内存和分片内存之外,Elasticsearch还需要非堆内存来存储其他数据结构,例如线程栈和JVM元数据。默认情况下,Elasticsearch会将非堆内存的大小设置为64MB。然而,对于高流量负载或大型数据集,可能需要更多的非堆内存。 可以通过在elasticsearch.yml文件中添加以下行来修改非堆内存的大小: ``` -XX:MaxDirectMemorySize=10g ``` 在上面的示例中,非堆内存被设置为10GB。 总之,正确配置Elasticsearch内存分配非常重要,因为它可以显着提高搜索和分析性能。建议根据实际情况调整堆内存、分片内存和非堆内存的大小,以满足特定的负载需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值