ElasticSearch段累积,堆增加直到崩溃

6g8kf2rb  于 2022-11-07  发布在  Lucene
关注(0)|答案(1)|浏览(179)

我需要一些ElasticSearch的帮助,这个问题困扰了我几个月,无论我做什么都没有任何真实的的改善。
我运行了一个6节点集群,由6个数据节点r4.xlarge(30.5GB)组成,其中3个也是合格的主节点。每个节点都有14 GB的HEAP内存。
问题如下:堆锯齿模式是可见的,但随着时间的推移,它会变得越来越小,直到节点崩溃。请参阅示例:

堆与段一起构建,您可以看到,每天晚上创建新的每日索引时,段计数都会出现峰值。
我们的设置由2个主索引和2个小索引组成,所有索引都已Map。2个主索引有4个碎片和1个副本,小索引有1个碎片和1个副本。
主要指数的每日指数大小各不相同:

  • 印数指数-每天约70- 100 GB,约1500万份文档
  • bidds index -每天25- 40 GB,约1300万个文档在这两种情况下,refresh_interval都设置为5秒。

指数化率不是很高:

我甚至会说,对于这样强集群来说,它相当低。
很明显,存在一些配置问题,导致段无休止地增加,并对堆内存使用造成压力。
我试过玩shards countnumber of replicasrefresh_interval和更多的...不好。这个集群的设置甚至从m4.xlarge机器升级到新的r4.xlarge机器-这也几乎没有任何效果!!
值得一提的是,我们每小时运行一次真实的繁重的查询,使用多个聚合级别,对多达7天的数据(7个索引)进行查询,但有了这样大的RAM和正确的索引,这应该不是问题。
ElasticSearch版本是2.4.1,每个r4.xlarge节点包含30.5GB RAM和1200 GB SSD。当然,所有这些都托管在AWS上。

ltskdhd1

ltskdhd11#

您是否在节点上设置了此选项?
indices.fielddata.cache.size: 20%
通过设计,字段数据在需要时被加载到内存中,并且永远不会被逐出。它们将填充堆直到OutOfMemory异常。这不是bug,而是一个特性。
配置缓存限制以停止该“功能”是至关重要的。
我在ElasticSearch 2.x上有集群,它们都遇到了这个问题。我不确定它是否在以后的版本中被调整为默认不系统地耗尽内存。
使用stats API查看资源使用情况:https://www.elastic.co/guide/en/elasticsearch/reference/2.4/cluster-nodes-stats.html

相关问题