Elasticsearch - indices.fielddata.cache.size和indices.fielddata.breaker.limit之间的区别

Ben*_*Lim 5 elasticsearch

Elasticsearch中不稳定的最大原因之一是fielddata:必须将字段值加载到内存中以使聚合,排序和脚本执行速度与它们一样快.

如上面关于Elasticsearch页面的描述,大型fielddata总是导致Elasticsearch内存不足(OOM).因此,我们可以设置indices.fielddata.cache.sizeindices.fielddata.breaker.limit来防止OOM.这两个设置有什么不同?他们有任何关系吗?

例如,My Elasticsearch JVM的总内存为2g.如果我将indices.fielddata.cache.size设置为1g但indices.fielddata.breaker.limit设置为60%(这意味着1.2g).允许加载到内存的fielddata超过fielddata缓存大小.它会导致任何错误吗?(参考Fielddata)

谢谢.

Ben*_*Lim 13

经过长时间的研究,我找到了一些答案.

indices.fielddata.cache.size设置为1g时.这意味着elasticsearch可以使用多少字段高速缓存大小来处理查询请求.但是当您将indices.fielddata.breaker.limit设置为60%(表示1.2g)时,如果查询数据大于此大小,elasticsearch将拒绝此查询请求并导致异常.

因此,如果查询数据小于1.2g但大于1g,则elassticsearch将接受此查询请求.到达indices.fielddata.cache.size后,旧数据将刷新并释放内存以获取新数据.