Elasticsearch अधिकतम मेमोरी साइज़ को कैसे बदलें


99

मेरे पास एलिटेसर्च के डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ एक अपाचे सर्वर है और सब कुछ पूरी तरह से काम करता है, सिवाय इसके कि डिफ़ॉल्ट कॉन्फ़िगरेशन का अधिकतम आकार 1 जीबी है।

मेरे पास एलीटसर्च में संग्रहीत करने के लिए इतनी बड़ी संख्या में दस्तावेज़ नहीं हैं, इसलिए मैं मेमोरी कम करना चाहता हूं।

मैंने देखा है कि मुझे -Xmxजावा कॉन्फ़िगरेशन में पैरामीटर बदलना होगा , लेकिन मुझे नहीं पता कि कैसे।

मैंने देखा है कि मैं इसे निष्पादित कर सकता हूं:

bin/ElasticSearch -Xmx=2G -Xms=2G

लेकिन जब मुझे एलिस्टिक्स खोज को पुनः आरंभ करना होगा तो यह खो जाएगा।

क्या एलीस्टेसर्च को सेवा के रूप में स्थापित किए जाने पर अधिकतम मेमोरी उपयोग को बदलना संभव है?


क्या ऑपरेटिंग सिस्टम और संस्करण? एलिटिक्स खोज संस्करण? आपने एलिस्टिक्स खोज कैसे स्थापित की?
जेम्स एडिसन

1
आप प्रतिकृतियां और शार्प्स की संख्या कम करना चाह सकते हैं क्योंकि 1 नोड सेटअप पर उनके होने का कोई उल्टा नहीं है, इसे /etc/elasticsearch/elasticsearch.yaml में जोड़ें: index.number_of_shards: 1 index.number_of_replicas: 0 इस तरह से आप स्मृति और सीपीयू को अनावश्यक कार्य न करने से बचाते हैं। ।
neo112

जवाबों:


127

में ElasticSearch> = 5 प्रलेखन है बदल , जिसका अर्थ है ऊपर जवाब में से कोई भी मेरे लिए काम किया।

मैंने ES_HEAP_SIZEअंदर /etc/default/elasticsearchऔर बाहर बदलने की कोशिश की etc/init.d/elasticsearch, लेकिन जब मैंने भाग लिया तब ps aux | grep elasticsearchभी आउटपुट दिखा:

/usr/bin/java -Xms2g -Xmx2g # aka 2G min and max ram

मुझे ये बदलाव करने थे:

/etc/elasticsearch/jvm.options

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space

-Xms1g 
-Xmx1g 
# the settings shipped with ES 5 were: -Xms2g
# the settings shipped with ES 5 were: -Xmx2g

3
और मैक ओएस 10.12 पर /usr/local/opt/elasticsearch/libexec/config/jvm.options
एलीस्टैचर्च

1
मैं इस कार्य की पुष्टि कर सकता हूँ aws ami उदाहरण के लिए (RPM के साथ स्थापित), लेकिन पहले MAX_LOCKED_MEMORY = को / etc / sysconfig / elasticsearch और bootstrap.memory_lock में असीमित सेट करें: /etc/elasticsearch/elasticsearch.yml
mork में

2
यह विंडोज में काम नहीं करता है - सही उत्तर यहाँ है: stackoverflow.com/questions/28798845/…
cbp

4
/usr/local/etc/elasticsearch/jvm.options
होमब्रेव इंस्टाल्स के

117

24 नवंबर, 2016 को अपडेट किया गया : एलियस्टैसर्च 5 ने जाहिरा तौर पर जेवीएम को कॉन्फ़िगर करने का तरीका बदल दिया है। इसका जवाब यहां देखें । नीचे दिए गए उत्तर अभी भी संस्करणों <5 पर लागू होते हैं।

tirdadc, नीचे अपनी टिप्पणी में इसे इंगित करने के लिए धन्यवाद।


मेरे पास एक पास्टबिन पेज है जिसे मैं मेमोरी और ईएस के बारे में सोचते हुए दूसरों के साथ साझा करता हूं। यह मेरे लिए ठीक काम किया है: http://pastebin.com/mNUGQCLY । मैं यहाँ भी सामग्री चिपकाऊंगा:

संदर्भ:

https://github.com/grigorescu/Browarian/wiki/ElasticSearch-Configuration http://www.elasticsearch.org/guide/reference/setup/installation/

स्मृति और फ़ाइल संख्या सीमाओं को संशोधित करने के लिए निम्न फ़ाइलों को संपादित करें। ये निर्देश उबंटू 10.04 मानते हैं, बाद के संस्करणों और अन्य वितरण / ओएस पर काम कर सकते हैं। ( संपादित करें : यह Ubuntu 14.04 के लिए भी काम करता है।)

/etc/security/limits.conf :

elasticsearch - nofile 65535
elasticsearch - memlock unlimited

/ etc / डिफ़ॉल्ट / elasticsearch (CentOS / RH पर: / etc / sysconfig / elasticsearch) :

ES_HEAP_SIZE=512m
MAX_OPEN_FILES=65535
MAX_LOCKED_MEMORY=unlimited

/etc/elasticsearch/elasticsearch.yml :

bootstrap.mlockall: true

4
यह अच्छा लग रहा है। मुझे यह निर्धारित करने के बारे में निम्नलिखित सलाह भी है कि ES_HEAP_SIZE क्या होना चाहिए: अंगूठे का नियम यह है कि ElasticSearch ढेर मशीन पर उपलब्ध मेमोरी का लगभग 50% होना चाहिए। ElasticSearch सिस्टम कैश का भारी उपयोग करता है, इसलिए आपको उनके लिए पर्याप्त मेमोरी छोड़ देनी चाहिए। ( asquera.de/opensource/2012/11/25/… से )
टॉम

17
CentOS में, मुझे आपके /etc/defaultद्वारा `/ etc / sysconfig 'के तहत बैठने वाले विन्यास को देखा जाता है
निशांत

5
/etc/sysconfig/elasticsearchइन परिवर्तनों को करने के लिए CentOS उपयुक्त स्थान है। RPM इस फ़ाइल का एक डिफ़ॉल्ट संस्करण भी प्रदान करता है।
slm

5
यह अब एलीटसर्च 5 के लिए लागू नहीं है, आपको इस उत्तर की आवश्यकता है ।
tiradc

2
यह अच्छा लग रहा है, लेकिन मैंने अपनी सीमाओं को विशेष रूप से elasticsearch उपयोगकर्ता के लिए/etc/security/limits.d/elasticsearch.conf
radtek

26

Centos 7 पर ऐसा करने के लिए या SystemD को चलाने वाले किसी अन्य सिस्टम के साथ देखने के लिए, आप इसे बदल सकते हैं

/etc/sysconfig/elasticsearch 

ES_HEAP_SIZE लाइन को रद्द करें, और एक मान सेट करें, जैसे:

# Heap Size (defaults to 256m min, 1g max)
ES_HEAP_SIZE=16g

(1 जी अधिकतम के बारे में टिप्पणी को अनदेखा करें - यह डिफ़ॉल्ट है)


मुझे जोड़ना चाहिए: मैंने सेंटोस 7 पर ईएस 1.7 पर ऊपर दिए गए दृष्टिकोण की कोशिश की, और इसका कोई प्रभाव नहीं पड़ा
जोन्सोमे बहाल मोनिका

1
@Jonesome निश्चित नहीं है कि मैं क्या सुझाव दे सकता हूं - मैं CentOS 7 पर ES RPM पैकेज से ES 1.7.1 चला रहा हूं और यह पथ है कि यह फ़ाइल मौजूद है और ES_HEAP_SIZE को बदलना उद्देश्य के अनुसार काम करता है।

9

के लिए निर्देश ubuntu 14.04:

sudo vim /etc/init.d/elasticsearch

सेट

ES_HEAP_SIZE=512m

फिर:

sudo vim /etc/elasticsearch/elasticsearch.yml

सेट:

bootstrap.memory_lock: true

अधिक जानकारी के लिए फ़ाइलों में टिप्पणियां हैं


9

मेरे मामले में पिछले उत्तर अपर्याप्त थे, शायद इसलिए कि मैं डेबियन 8 पर हूं, जबकि उन्हें कुछ पिछले वितरण के लिए भेजा गया था।

डेबियन 8 पर सेवा स्क्रिप्ट को आम तौर पर जगह में संशोधित करें /usr/lib/systemd/system/elasticsearch.service, और Environment=ES_HEAP_SIZE=8G अन्य "पर्यावरण = *" लाइनों के नीचे जोड़ें ।

अब सेवा स्क्रिप्ट को पुनः लोड करें और सेवा को systemctl daemon-reloadपुनरारंभ करें। नौकरी तो चाहिए!


1
धन्यवाद, आप मेरा दिन बचाएं! हां, डेबियन 8 के लिए यह सही प्रक्रिया है
तेजी से

क्या इसे कॉन्फ़िगर करने के लिए कोई और जगह नहीं है लेकिन किसी फ़ाइल को बदलने के लिए /usr/?
मार्टिन श्रोडर

6

अगर आप https://github.com/elasticsearch/elasticsearch-servicewrapper पर मिली एलीटेसर्च की गितुब रिपॉजिटरी में दिए गए सर्विस रैपर का इस्तेमाल करते हैं , तो इलास्टिसर्च-सर्विस-सर्विस (सर्विस / इलस्टीटॉर्च.कॉन्फ़र) की मेमोरी फ़ाइल मेमोरी सेटिंग्स को नियंत्रित करती है। Elasticsearch.conf के शीर्ष पर एक पैरामीटर है:

set.default.ES_HEAP_SIZE=1024

इस पैरामीटर को कम करें, एलिटोसर्च की आवंटित स्मृति को कम करने के लिए "set.default.ES_HEAP_SIZE = 512" पर कहें।

ध्यान दें कि यदि आप इलास्टिक्स खोज-आवरण का उपयोग करते हैं, तो ES_HEAP_SIZE elasticsearch.conf में उपलब्ध कराए जाने पर सभी अन्य सेटिंग को छोड़ देता है। यह मुझे पता लगाने के लिए थोड़ा सा लगा, क्योंकि प्रलेखन से, ऐसा लगता था कि हीप मेमोरी को इलास्टिक्सखोज.आईएमएल से सेट किया जा सकता है।

यदि आपकी सर्विस रैपर सेटिंग्स कहीं और सेट की गई हैं, जैसे / etc / default / elasticsearch के रूप में जेम्स के उदाहरण में, तो वहां ES_HEAP_SIZE सेट करें।


2
क्या होगा अगर आपके पास कोई सेवा नहीं है? (यानी बस बिन / इलास्टिक्स खोज-डी चलाएं)
हेनले चिउ


@HenleyChiu तो इसे चलाने से पहले ES_HEAP_SIZE पर्यावरण चर सेट करें। यानीexport ES_HEAP_SIZE=1G; bin/elasticsearch -d
एंड्रे रीजेंटोव

ES 1.7.x स्टॉक elasticsearch.conf (CentOS पर आरपीएम द्वारा स्थापित) में, कोई सेट नहीं है। क्या यह दृष्टिकोण ES 1.7 पर काम करता है?
जोन्सोमे मोनिका

उपरोक्त उत्तर भ्रामक है। ES_HEAP_SIZE को / etc / sysconfig / elasticsearch में सेट करें
जोन्सोम बहाल मोनिका

6

यदि आपने RPM / DEB संकुल का उपयोग करके ES स्थापित किया है (जैसा कि आपको लगता है), आप init स्क्रिप्ट ( /etc/init.d/elasticsearch on RHEL/CentOS) का संपादन करके इसे समायोजित कर सकते हैं । यदि आपके पास फ़ाइल है, तो आपको निम्नलिखित के साथ एक ब्लॉक दिखाई देगा:

export ES_HEAP_SIZE
export ES_HEAP_NEWSIZE
export ES_DIRECT_SIZE
export ES_JAVA_OPTS
export JAVA_HOME

आकार को समायोजित करने के लिए, बस ES_HEAP_SIZEलाइन को निम्न में बदलें :

export ES_HEAP_SIZE=xM/xG

(जहाँ x, MB / GB RAM की संख्या है जिसे आप आवंटित करना चाहते हैं)

उदाहरण:

export ES_HEAP_SIZE=1G

1GB आवंटित करेगा।

एक बार जब आप स्क्रिप्ट को संपादित कर लेते हैं, तो सहेजें और बाहर निकलें, फिर सेवा को पुनरारंभ करें। आप जाँच कर सकते हैं कि यह सही ढंग से निम्नलिखित चलाकर सेट किया गया है:

ps aux | grep elasticsearch

और जावा प्रक्रिया में रिटर्न के लिए -Xms और -Xmx झंडे की जाँच करना:

/usr/bin/java -Xms1G -Xmx1G

उम्मीद है की यह मदद करेगा :)


1
इस तरह से मत करो। इस प्रकार के परिवर्तन करने के लिए यह अच्छी जगह नहीं है। यह एक विशालकाय हैक है! काम हो सकता है, लेकिन जब भी ES को अपडेट किया जाता है तो यह संभावित रूप से ट्रैश हो जाएगा।
स्लम

1
मुझे जोड़ना चाहिए: मैंने सेंटोस 7 पर ईएस 1.7 पर उपरोक्त दृष्टिकोण की कोशिश की, और इसका कोई प्रभाव नहीं पड़ा।
जोन्सोमे मोनिका

3
  • एलेस्टिक्स खोज, Xms (न्यूनतम हीप आकार) और Xmx (अधिकतम ढेर आकार) सेटिंग्स के माध्यम से jvm.options में निर्दिष्ट पूरे ढेर को निर्दिष्ट करेगा।
    • -Xmx12g
    • -Xmx12g
  • न्यूनतम हीप आकार (Xms) और अधिकतम हीप आकार (Xmx) को एक दूसरे के बराबर सेट करें।
  • जेवीएम संपीड़ित ऑब्जेक्ट पॉइंटर्स (संपीड़ित ऊप्स) के लिए कटऑफ के ऊपर एक्सएमएक्स सेट न करें, सटीक कटऑफ भिन्न होता है लेकिन 32 जीबी के पास है।

  • पर्यावरण चर के माध्यम से ढेर का आकार निर्धारित करना भी संभव है

    • ES_JAVA_OPTS = "- Xms2g -Xmx2g" ./bin/elasticsearch
    • ES_JAVA_OPTS = "- Xms4000m -Xmx4000m" ./bin/elastics

इसके अलावा भौतिक रैम के 50% से अधिक नहीं
एची

हाय मैं इस तरह से पर्यावरण चर कैसे सेट करता हूं। उपलब्ध नाम ES_JAVA_OPTS और मूल्य है: "-Xms2g -Xmx2g" ।/bin/elasticsearch जैसे
मणिकंदन

इसके अलावा मैं कैसे पुष्टि करता हूं, ढेर का आकार सही ढंग से अपडेट किया गया है
मणिकंदन

2

इलास्टिक्सखोज पथ में घर dir यानी आम तौर पर /usr/share/elasticsearch, एक config फाइल होती है bin/elasticsearch.in.sh। पैरामीटर संपादित करें ES_MIN_MEM, ES_MAX_MEMपरिवर्तन करने के लिए इस फ़ाइल में -Xms2g, -Xmx4gक्रमशः। और कृपया सुनिश्चित करें कि आपने इस विन्यास परिवर्तन के बाद नोड को पुनः आरंभ किया है।


1

यदि आप विंडोज़ सर्वर का उपयोग करते हैं, तो आप पर्यावरण चर को बदल सकते हैं, नया पर्यावरण मूल्य लागू करने और इलास्टिक सेवा शुरू करने के लिए सर्वर को पुनः आरंभ कर सकते हैं। विंडोज सर्वर में इंस्टॉल एलास्टिक में अधिक विस्तार


1

इलास्टिक्स खोज में 2.x:

vi /etc/sysconfig/elasticsearch 

कोड के ब्लॉक पर जाएं

# Heap size defaults to 256m min, 1g max
# Set ES_HEAP_SIZE to 50% of available RAM, but no more than 31g
#ES_HEAP_SIZE=2g

अधूरापन अंतिम पंक्ति जैसा

ES_HEAP_SIZE=2g
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.