在升级到1.7.3之前它正在工作但是现在它告诉我我的"数据对于[性别]来说太大了。我跑了
curl -XGET localhost:9200/_nodes/stats/indices/fielddata?fields=*
它产生了
{
{"fielddata":{"memory_size_in_bytes":642066528,"evictions":0,
"fields":{"Markers":{"memory_size_in_bytes":196538816},
"RegistrationDate":{"memory_size_in_bytes":101759288},
"Abbreviation":{"memory_size_in_bytes":185815224},
"Gender":{"memory_size_in_bytes":52988320},
"Birthdate":{"memory_size_in_bytes":104956384},
"buildNum":{"memory_size_in_bytes":8496}
}
}
性别只是一个角色,那么它怎么会变得那么大呢?
阅读https://www.elastic.co/guide/en/elasticsearch/guide/current/_limiting_memory_usage.html似乎表明它不应该那么大。它只有M,F,U表示值。有什么想法吗?
标记
nested: UncheckedExecutionException[org.elasticsearch.common.breaker.CircuitBreakingException: [FIELDDATA] Data too large, data for [Gender] would be larger than limit of [633785548/604.4mb]];
答案 0 :(得分:2)
您可能遇到CircuitBreakingException
。这样做的主要原因是您的堆几乎已满,并且没有足够的可用内存来提供请求。它并不一定意味着Gender
值会占用整个内存,只是ES无法加载Gender
字段所需的所有字段数据以及剩余的可用内存。
默认情况下,如果没有为fielddata缓存设置特定限制,则不会发生fielddata驱逐(输出中提示"evictions":0
),默认情况下不设置限制。因此,您应尝试将indices.fielddata.cache.size
设置为相对值(例如10%)或绝对值(例如3GB)。
您可以在elasticsearch.yml
文件中设置它(在每个节点上)并重新启动节点或使用
curl -XPUT localhost:9200/_cluster/settings -d '{
"persistent" : {
"indices.fielddata.cache.size" : "20%"
}
}'
请注意,设置过低的值会对群集产生负面影响,因为会有大量的驱逐行为,而且必须经常重建fielddata缓存。因此,您可能需要进行一些实验,直到找到正确的值。