FIELDDATA数据太大

时间:2015-06-12 19:45:37

标签: elasticsearch kibana-4

我打开kibana并进行搜索,我得到了分片失败的错误。我查看了elasticsearch.log文件,我看到了这个错误:

org.elasticsearch.common.breaker.CircuitBreakingException: [FIELDDATA] Data too large, data for [@timestamp] would be larger than limit of [622775500/593.9mb]

有没有办法增加593.9mb的限制?

6 个答案:

答案 0 :(得分:17)

您可以尝试在elasticsearch.yml配置文件中将fielddata circuit breaker限制增加到75%(默认为60%),然后重新启动群集:

indices.breaker.fielddata.limit: 75%

或者,如果您不想重新启动群集,可以使用以下命令动态更改设置:

curl -XPUT localhost:9200/_cluster/settings -d '{
  "persistent" : {
    "indices.breaker.fielddata.limit" : "40%" 
  }
}'

试一试。

答案 1 :(得分:1)

我也遇到了这个问题。 然后我检查fielddata内存。

使用以下请求:

GET /_stats/fielddata?fields=*

输出显示:

"logstash-2016.04.02": {
  "primaries": {
    "fielddata": {
      "memory_size_in_bytes": 53009116,
      "evictions": 0,
      "fields": {

      }
    }
  },
  "total": {
    "fielddata": {
      "memory_size_in_bytes": 53009116,
      "evictions": 0,
      "fields": {

      }
    }
  }
},
"logstash-2016.04.29": {
  "primaries": {
    "fielddata": {
      "memory_size_in_bytes":0,
      "evictions": 0,
      "fields": {

      }
    }
  },
  "total": {
    "fielddata": {
      "memory_size_in_bytes":0,
      "evictions": 0,
      "fields": {

      }
    }
  }
},

你可以看到我的索引名称基准日期时间,驱逐全部为0.另外,2016.04.02内存为53009116,但2016.04.29也为0。

所以我可以得出结论,旧数据占用了所有内存,所以新数据无法使用它,然后当我使用agg查询新数据时,它会引发CircuitBreakingException

你可以设置config / elasticsearch.yml

indices.fielddata.cache.size:  20%

它使es可以在达到内存限制时逐出数据。

但可能是真正的解决方案,你应该在未来添加内存。并监控fielddata内存使用是好习惯。

更多细节:https://www.elastic.co/guide/en/elasticsearch/guide/current/_limiting_memory_usage.html

答案 2 :(得分:0)

我认为重要的是要了解为什么会发生这种情况。

在我的情况下,我遇到此错误,因为我在"analyzed"字段上运行聚合。如果您确实需要将字符串字段设为analyzed,则应考虑使用多字段并将其设为analyzed以进行搜索,并not_analyzed进行汇总。

答案 3 :(得分:0)

前几天我遇到了这个问题。除了检查fielddata内存之外,我还考虑检查JVM和OS内存。在我的情况下,管理员忘记修改ES_HEAP_SIZE并将其保留在1gig。

答案 4 :(得分:0)

CircuitBreakingException: [FIELDDATA] Data too large错误的替代解决方案是清理旧的/未使用的FIELDDATA缓存。

我发现fielddata.limit已在多个索引之间共享,因此删除未使用的索引/字段的缓存可以解决此问题。

curl -X POST "localhost:9200/MY_INDICE/_cache/clear?fields=foo,bar"

有关更多信息,https://www.elastic.co/guide/en/elasticsearch/reference/7.x/indices-clearcache.html

答案 5 :(得分:0)

只需使用:

ES_JAVA_OPTS="-Xms10g -Xmx10g" ./bin/elasticsearch

由于默认堆为1G,因此如果数据很大,则应将其设置为更大