2015-10-21 136 views
-1

它升级到1.7.3之前的工作,但现在它告诉我,我的“数据太大[两性]我跑了Elasticsearch聚集破壁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为VALU ES。任何想法的原因?

马克

nested: UncheckedExecutionException[org.elasticsearch.common.breaker.CircuitBreakingException: [FIELDDATA] Data too large, data for [Gender] would be larger than limit of [633785548/604.4mb]]; 
+0

你能确认它是一个'CircuitBreakingException'吗?你还可以添加该消息的最后部分,即“...会大于......的限制吗? – Val

回答

2

你可能会遇到一个CircuitBreakingException。造成这种情况的主要原因是你的堆已满,并且没有足够的内存来满足请求。这并不一定意味着Gender值占据了整个内存,只是ES无法加载它所需的所有字段数据,而只剩下可用内存。

默认情况下,没有fielddata驱逐发生(在输出提示"evictions":0)如果没有特定限制的fielddata缓存,默认情况下没有限制设置设置。因此,您应该尝试将indices.fielddata.cache.size设置为相对(例如10%)或绝对值(例如3GB)。

你可以将它设置在elasticsearch.yml文件(每个节点上),然后重新启动您的节点或

curl -XPUT localhost:9200/_cluster/settings -d '{ 
    "persistent" : { 
     "indices.fielddata.cache.size" : "20%" 
    } 
}' 

注意做到动态的,设置的值过低会因为你的集群产生负面影响将会有很多驱逐和fielddata缓存将不得不经常重建。所以你可能需要试验一下,直到找到合适的值。

+0

我有一个8GB的专用ES机器。我正在尝试4GB的indices.fielddata.cache.size并继续工作直到它中断。 –

+0

我能够在原始错误消息中找到600mb值的状态。很难说性能。我注意到表现从1.7.2下降到1.7.3。感谢您的答案@Val。 –