2015-06-12 15 views
10

मैं किबाना खोलता हूं और एक खोज करता हूं और मुझे त्रुटि मिलती है जहां शर्ड्स विफल हो जाते हैं। मैं elasticsearch.log फ़ाइल में देखा और मैं इस त्रुटि देखा:FIELDDATA डेटा बहुत बड़ा है

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

वहाँ किसी भी तरह से 593.9mb की सीमा को बढ़ाने के लिए है?

+1

आप डेवलपर टूल्स खोलकर, नेटवर्क टैब का चयन करके, फिर खोज क्वेरी को फिर से चलाकर क्रोम में यह त्रुटि भी देख सकते हैं। यह त्रुटि संदेश '_msearch? 'ईवेंट के' प्रतिक्रिया 'फ़ील्ड में उपलब्ध होगा। इससे मदद मिलती है यदि आपके पास सर्वर लॉग तक सीधे पहुंच नहीं है। – anothermh

उत्तर

15

आप अपने elasticsearch.yml कॉन्फ़िग फ़ाइल में 75% (डिफ़ॉल्ट 60% है) करने के लिए fielddata circuit breaker सीमा को बढ़ाने के लिए और अपने क्लस्टर पुनः आरंभ करने की कोशिश कर सकते हैं:

indices.breaker.fielddata.limit: 75% 

या आप बदल सकते हैं अगर आप अपने क्लस्टर पुनः आरंभ नहीं करना पसंद करते हैं गतिशील रूप से सेटिंग का उपयोग:

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

इसे आज़माएं।

+0

यह तुरंत उस समस्या का समाधान करता है जो मैं कर रहा था और जब तक मैं उपलब्ध स्मृति को बढ़ा नहीं सकता तब तक काम करेगा। – anothermh

+0

आप elasticsearch 5.x के लिए यह कैसे करते हैं? – Amar

+0

मैंने _cluster और मेरे क्लस्टर नाम के लिए यह कोशिश की है, लेकिन जब मैं _cluster/सेटिंग्स पर मिलता हूं तो ऐसा प्रतीत नहीं होता है। –

1

मैं भी इस समस्या को पूरा करता हूं। फिर मैं फ़ील्डडेटा मेमोरी की जांच करता हूं। अनुरोध नीचे

उपयोग:

`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": { 

     } 
    } 
    } 
}, 

तुम मेरे अनुक्रमित आधार datetime नाम दें, और निष्कासन सभी 0. अलावा, 2016/04/02 स्मृति 53,009,116 है देख सकते हैं, लेकिन 2016.04.2 9 0 भी है।

तो मैं इस निष्कर्ष पर कर सकते हैं, पुराने डेटा सभी स्मृति पर कब्जा है, इसलिए नए डेटा नहीं कर सकते इसका इस्तेमाल, और फिर जब मैं agg क्वेरी नए डेटा बनाने के लिए, यह CircuitBreakingException

आप config/elasticsearch सेट कर सकते हैं बढ़ा। yml

indices.fielddata.cache.size: 20% 

यह मेमोरी सीमा तक पहुंचने पर डेटा को बेदखल कर सकता है।

लेकिन वास्तविक समाधान हो सकता है कि आपको मेमोरी में मेमोरी जोड़नी चाहिए। और फील्डडेटा मेमोरी उपयोग की निगरानी अच्छी आदतें हैं।

और अधिक विस्तार: https://www.elastic.co/guide/en/elasticsearch/guide/current/_limiting_memory_usage.html

0

मुझे लगता है कि यह समझना महत्वपूर्ण है क्यों यह पहली जगह में हो रहा है महत्वपूर्ण है।

मेरे मामले में, मुझे यह त्रुटि थी क्योंकि मैं "analyzed" फ़ील्ड पर एकत्रीकरण चला रहा था। यदि आपको वास्तव में analyzed होने के लिए अपने स्ट्रिंग फ़ील्ड की आवश्यकता है, तो आपको मल्टीफ़िल्ड्स का उपयोग करने पर विचार करना चाहिए और इसे analyzed खोजों और not_analyzed समेकन के लिए बनाना चाहिए।

0

मैं दूसरे दिन इस मुद्दे में भाग गया। फ़ील्डडेटा मेमोरी की जांच के अलावा, मैं भी जेवीएम और ओएस मेमोरी की जांच करने पर विचार करता हूं। मेरे मामले में, व्यवस्थापक ES_HEAP_SIZE को संशोधित करना भूल गया और इसे 1gig पर छोड़ दिया।

संबंधित मुद्दे