キバナを開いて検索すると、シャードが失敗したというエラーが表示されます。 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の制限を増やす方法はありますか?
elasticsearch.yml
構成ファイルで fielddata回路ブレーカー 制限を75%(デフォルトは60%)に増やして、クラスターを再起動してみてください。
indices.breaker.fielddata.limit: 75%
または、クラスターを再起動しない場合は、次を使用して設定を動的に変更できます。
curl -XPUT localhost:9200/_cluster/settings -d '{
"persistent" : {
"indices.breaker.fielddata.limit" : "40%"
}
}'
試してみる。
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
私もこの問題に出会います。次に、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%
メモリの上限に達したときに、データを削除できるようにします。
しかし、将来的にメモリを追加する必要がある本当の解決策になる可能性があります。フィールドデータのメモリ使用量を監視することは良い習慣です。
詳細: https://www.elastic.co/guide/en/elasticsearch/guide/current/_limited_memory_usage.html
ただ使用する:
ES_Java_OPTS="-Xms10g -Xmx10g" ./bin/elasticsearch
デフォルトのヒープは1Gであるため、データが大きい場合は、より大きく設定する必要があります
先日この問題に遭遇しました。フィールドデータのメモリをチェックするだけでなく、JVMとOSのメモリもチェックすることを検討します。私の場合、管理者はES_HEAP_SIZEを変更するのを忘れて、1gigのままにしました。
そもそもなぜこれが起こっているのかを理解することが重要だと思います。
私の場合、"analyzed"
フィールドで集計を実行していたため、このエラーが発生しました。文字列フィールドを本当にanalyzed
にする必要がある場合は、マルチフィールドの使用を検討して、検索の場合はanalyzed
、集計の場合はnot_analyzed
にする必要があります。