Elasticsearch集群fielddata_memory异常增加...

运维有笔谈 2024-08-05 02:46:55

私信 运维笔谈,回复 “阿里云k8s” 可以获取 《阿里云Kubernetes项目实战手册》PDF。

前天有个朋友告诉我,他们生产跑的Elasticsearch 集群突然 fielddata_memory指标急剧增加,导致堆内存不够用,最终导致日志延迟堆积了。

那么fielddata_memory在ES里是个什么类型的参数呢,它的作用又是什么呢?

Elasticsearch中的field data是一种查询式内存数据结构,当对文本(text)字段进行排序、聚合或脚本访问时,这种数据结构会被创建并存储在Java堆内存中。

fielddata_memory内存急剧增加,以下是可能出现的原因:

1. 复杂查询

如果执行了复杂的查询,特别是那些涉及对text类型字段进行排序、聚合或脚本计算的查询,这些操作会触发fielddata的加载,从而增加fielddata缓存的内存使用量。

2. 查询量激增

当Elasticsearch集群承受的查询负载突然增加时,比如在高流量时段或遇到突发请求时,更多的查询会尝试加载 field data,导致内存使用量迅速上升。

3. 配置不当

indices.fielddata.cache.size设置得过高,导致Elasticsearch允许fielddata缓存占用更多的内存。虽然这可以提高查询性能,但也会增加内存溢出的风险。我朋友那边配置的是堆内存的30%,看来是设置的过高了。

我们可以通过以下命令查看哪个字段占用比较多。

GET /_cat/fielddata?v&fields=*

假如要快速恢复故障,可以使用一个暴力手段(谨慎使用)直接清掉全部缓存。

POST _cache/clear
0 阅读:0

运维有笔谈

简介:感谢大家的关注