Elasticsearch中不稳定的最大原因之一是现场数据:字段值必须加载到内存中,才能使聚合、排序和脚本执行得和它们一样快。
正如上面对Elasticsearch页面的描述一样,大的字段数据总是导致弹搜索内存不足(OOM)。因此,我们可以设置indices.fielddata.cache.size和indices.fielddata.breaker.limit来防止OOM。这两种设置有什么不同?他们有什么关系吗?
例如,我的Elasticsearch有2g总内存。如果我将indices.fielddata.cache.size设置为1g,而indices.fielddata.breaker.limit设置为60% (这意味着1.2g)。允许加载到内存的字段数据超出了字段数据缓存的大小。它会导致任何错误吗?(参考场数据)
谢谢。
发布于 2014-02-27 01:22:35
经过很长一段时间的学习,我找到了一些答案。
当您将indices.fielddata.cache.size设置为1g时。它意味着可以使用多少字段缓存大小elasticsearch来处理查询请求。但是,当您将indices.fielddata.breaker.limit设置为60% (意为1.2g)时,如果查询数据大于此大小,elasticsearch将拒绝此查询请求并导致异常。
因此,如果查询数据小于1.2g,但大于1g,则elassticsearch将接受此查询请求。到达indices.fielddata.cache.size,后,旧数据将被刷新并释放内存以获取新数据。
发布于 2015-01-28 12:26:49
他们的不同之处是,我引用
在加载数据后,将检查字段数据大小。如果一个查询试图加载更多的字段数据而不是可用内存,会发生什么情况?答案是丑陋的:你会得到一个OutOfMemoryException。 Elasticsearch包括一个用于处理这种情况的现场数据断路器。断路器通过内省所涉及的字段(它们的类型、基数、大小等)来估计查询的内存需求。然后,它检查加载所需的字段数据是否会将整个字段数据大小推到堆的配置百分比之上。 如果估计的查询大小大于限制,则跳闸,查询将被中止并返回异常。这是在加载数据之前发生的,这意味着您不会访问OutOfMemoryException。
来自限制内存使用。
https://stackoverflow.com/questions/21691795
复制相似问题