इलास्टिक्स खोज के लिए vm.max_map_count बदलने में असमर्थ


14

प्रागितिहास

मेरे पास इलास्टिसर्च और सुगरक्रोम 7 सेंटोस 6.5 पर चल रहा है। हर दिन मुझे एक ही समस्या का सामना करना पड़ता है: जावा आउटऑफमैमोरी त्रुटि। छोटे vm.max_map_count मान के कारण ऐसा होता है, 65530 केवल जब 262144 की सिफारिश की जाती है।

मुसीबत

समस्या यह है कि vm.max_map_count अपरिवर्तनीय लगता है:

  1. जड़ के नीचे बदलना

    sudo sysctl -w vm.max_map_count=262144
    

    रिटर्न

    त्रुटि: कुंजी 'vm.max_map_count' पर अस्वीकृत

    जबकि

    ps aux | grep java
    

    केवल grep प्रक्रिया देता है

  2. इलास्टिक्सचर्च स्टार्टअप पर बदलाव

    sudo service elasticsearch start
    

    त्रुटि भी देता है

    त्रुटि: कुंजी 'vm.max_map_count' पर अस्वीकृत

    इलास्टिक्सखोज शुरू करना: [ठीक है]

  3. फ़ाइल के माध्यम से मैन्युअल परिवर्तन (गंदे-गंदे हैक):

    sudo vi /proc/sys/vm/max_map_count
    

    या तो काम नहीं करता है:

    "" proc / sys / vm / max_map_count "[आसानी से] 1 एल, 6 सी

    - INSERT - W10: चेतावनी: एक आसानी से फ़ाइल को बदलना

    E45: 'readonly' विकल्प सेट है (ओवरराइड में जोड़ें)

    "" / sys / vm / max_map_count "E212: लेखन के लिए फ़ाइल नहीं खोल सकता

    जबकि

    ls -la /proc/sys/vm/ | grep max_map_count
    

    रिटर्न

    -rw-r - r-- 1 रूट रूट 0 अप्रैल 10 09:36 max_map_count

    (लेकिन मुझे लगता है कि यह लिनक्स के लिए सामान्य हो सकता है / निर्देशिका की खरीद के बारे में बात कर रहा है)

तो मैं इस चर के मूल्य को कैसे बदल सकता हूं? हर रात इलास्टिक्स को फिर से शुरू करना एक अच्छा विचार नहीं है ... या कम से कम किसी को पता हो सकता है कि यह त्रुटि क्यों होती है?


3
यह किस तरह की मशीन है? वर्चुअल? यदि हां, तो किस तरह के वर्चुअलाइजेशन का उपयोग किया जाता है? ध्यान दें कि कुछ वर्चुअलाइजेशन उदाहरण के लिए, OpenVZ कंटेनर आपके कंटेनर पर सीमा लगाते हैं, और आपको कर्नेल और अन्य निम्न स्तर के सामान को "ट्वीक" करने की अनुमति नहीं देते हैं।
मिरोस्लाव कोसकर

@ मिरोस्लावकोस्कर मुझे नहीं पता, दुर्भाग्य से। मैं इसे कैसे पता लगा सकता हूं?
वैलेंटिना

@MiroslavKoskar उल्लेख करना भूल गया - मशीन आभासी है, निश्चित रूप से
वैलेंटिना

1
कैसे पता करें? अच्छा, यह कहाँ होस्ट किया गया है? यह बल्कि स्पष्ट होना चाहिए क्योंकि यह आमतौर पर आपके होस्टिंग प्रदाता के साथ आपके अनुबंध का हिस्सा है। यदि अभी भी संदेह है, तो अपने होस्टिंग प्रदाता समर्थन से संपर्क करें, शुरू करने के लिए IMHO सबसे अच्छी जगह है (क्योंकि यह आमतौर पर सौदे का हिस्सा है और कुछ ऐसी चीज है जो आप के लिए भुगतान कर रहे हैं)।
मिरोस्लाव कोसकर

@MiroslavKoskar अच्छी तरह से, प्रदाता ने प्रौद्योगिकी का उल्लेख किए बिना उत्तर दिया कि वे इस समस्या के साथ मेरी मदद नहीं कर सकते हैं (जो कि यथोचित है)। आपकी मदद के लिए धन्यवाद
Valentina

जवाबों:


13

आप लगभग वहाँ हैं, इससे कोई फर्क नहीं पड़ता कि वर्चुअल मशीन है या भौतिक मशीन है, वे सेटिंग्स हमेशा परिवर्तनशील होती हैं।

मैं 3 तरीके दिखाऊंगा।

कुछ पूर्व सूचना:

1) यदि संभव हो तो रूट के रूप में निष्पादित करना बेहतर है।

2) / यूनिक्स पर खरीद एक वास्तविक फाइल सिस्टम नहीं है, यह एक इन-मेमोरी कर्नेल फाइल सिस्टम है, लेकिन यह एक सामान्य डिस्क फाइल सिस्टम की तरह प्रतीत होता है। आप इसे 'नकली फाइलसिस्टम' या 'विशेष फाइलसिस्टम' कह सकते हैं, आप उन फर्जी फाइलों को vi या किसी अन्य संपादक के साथ संपादित नहीं कर सकते, क्योंकि वे फाइलें नहीं हैं, वे सिर्फ फाइलों की तरह दिखती हैं। मैं वर्षों पहले उसी समस्या से रुका हुआ था।

लेकिन उनके मूल्यों को बदलना सरल है, बस उन्हें संपादित करने के लिए एक और तरह के 'यांत्रिकी' की आवश्यकता होती है।

मैं समझाता हूँ: सबसे पहले, रूट होने की आवश्यकता है: (sudo कुछ डिस्ट्रोस में काम करता है, लेकिन कुछ अन्य डिस्ट्रोस पर नहीं करता है जैसे कि आपने कोशिश की, यह पहली विधि सार्वभौमिक है और किसी भी लिनक्स, macOS या किसी भी यूनिक्स-आधारित पर काम करती है आशा है कि आप रूट पासवर्ड तक पहुँच सकते हैं।

शीघ्र पर आगे बढ़ें:

    $ su root

रूट पासवर्ड दर्ज करें।

अब आप रूट कर रहे हैं, आइए वर्तमान मूल्य की जाँच करें: / proc / sys / vm / max_map_count

    $ cat /proc/sys/vm/max_map_count  
    65536

आइए इसे बदलते हैं:

    echo 262144 > /proc/sys/vm/max_map_count

आइए सत्यापित करें:

    cat /proc/sys/vm/max_map_count
    262144

हॊ गया! और यह पहले से ही लागू और कार्यात्मक है। किसी भी छद्म फ़ाइल के मानों को बदलकर / खरीद के तहत सेटिंग्स तुरन्त सक्रिय हो जाती हैं। लेकिन वे रिबूट के बाद बने नहीं रहते। आप मान के साथ खेल सकते हैं और इलास्टिसियर या किसी अन्य एप्लिकेशन या सिस्टम मेट्रिक्स पर प्रदर्शन परिवर्तनों को माप सकते हैं। अपने सिस्टम को ट्यूनिंग करें, कुछ पेपर पर मान लिख रहे हैं, सर्वोत्तम मान रखें। किसी भी गलती पर, रिबूट करें और वे सभी मूल मूल्यों पर वापस आ जाएंगे, और तब तक फिर से शुरू करेंगे जब तक कि सभी वांछित मूल्य इष्टतम न हों। इसके अंतर्गत बहुत सारे डिस्क और मेमोरी ट्यून करने योग्य पैरामीटर हैं। और अगर आप उन्हें अच्छी तरह से ट्यून करते हैं (और इसके लिए समय है) तो वे बहुत बड़ा अंतर और प्रदर्शन हासिल करते हैं। आप सही रास्ते पर हैं।

संतुष्ट होने पर, उन्हें स्थायी करें:

पहली विधि:

/etc/rc.local का उपयोग करते हुए

    vi /etc/rc.local 

r.local फ़ाइल के अंदर सभी पैरामीटर डालें, उदाहरण:

    echo 220000000 > /proc/sys/vm/dirty_background_bytes
    echo 320000000 > /proc/sys/vm/dirty_bytes
    echo 0 > /proc/sys/vm/dirty_background_ratio
    echo 0 > /proc/sys/vm/dirty_ratio
    echo 500 > /proc/sys/vm/dirty_writeback_centisecs
    echo 4500 > /proc/sys/vm/dirty_expire_centisecs
    echo 1 > /proc/sys/net/ipv4/tcp_rfc1337
    echo 10 > /proc/sys/vm/swappiness
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
    echo never > /sys/kernel/mm/transparent_hugepage/defrag
    echo 120 > /proc/sys/net/ipv4/tcp_keepalive_time
    echo 0 > /proc/sys/vm/zone_reclaim_mode
    echo deadline > /sys/block/sda/queue/scheduler
    echo 8 > /sys/class/block/sda/queue/read_ahead_kb
    echo 1048575 > /proc/sys/vm/max_map_count

फ़ाइल को बचाने के लिए vi संपादक को छोड़ दें।

उन मापदंडों को हर रिबूट पर सेट किया जाएगा, लॉगिन प्रॉम्प्ट शो के ठीक पहले, सभी init सेवाएं शुरू हो गई हैं।

( /etc/rc.local फ़ाइल को सभी स्टार्टअप लाइनक्स सेवाओं के बाद निष्पादित किया जाता है, यह काम नहीं कर सकता है यदि इलास्टिक्सर्च सेवा के रूप में इससे पहले शुरू हो, लेकिन यह विधि किसी अन्य सेटअप पर उपयोगी हो सकती है यदि आपको भविष्य में ज़रूरत हो, या आप इस तरह का उपयोग कर सकते हैं उन्हें आपकी इलास्टिसिट इनिट स्क्रिप्ट के अंदर डालकर, क्योंकि इनइट स्क्रिप्ट रूट के रूप में चलती है, इसलिए यह इनिट स्क्रिप्ट का उपयोग करने के लिए ऊपर समान सिंटैक्स है)

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

उन्हें स्थायी बनाने की दूसरी विधि:

अब पैरामीटर्स को लिनक्स पर किसी भी स्टार्टअप सेवा से पहले सेट किया जाएगा।

/Etc/sysctl.conf संपादित करें , अंदर पैरामीटर डालें

 vm.max_map_count=1048575
 vm.zone_reclaim_mode=0
 vm.dirty_background_bytes=220000000
 vm.dirty_background_ratio=0
 vm.dirty_bytes=320000000
 vm.dirty_ratio=0
 vm.swappiness=10

दूसरों के साथ चलते रहें, /etc/sysctl.conf को सहेजें , परिवर्तन लागू करने के लिए अपने सर्वर को रिबूट करें, या रिबूट के बिना परिवर्तनों को लागू करने के लिए sysctl -p निष्पादित करें । वे रिबूट में स्थायी होंगे।

ऊपर दो तरीके सबसे कमोम हैं। एक और एक है, और यह आपके लिए काम कर सकता है, यह सुडो का उपयोग करके है , लगभग जैसे आप कर रहे थे:

के बजाय:

  sudo sysctl -w vm.max_map_count=262144

प्रयत्न:

  echo 262144 | sudo tee /proc/sys/vm/max_map_count

यह ubuntu पर काम करता है।

सत्यापित करें:

   user@naos:~$ cat /proc/sys/vm/max_map_count
   262144

आशा है कि मैंने किसी को मदद की है, कम से कम समस्या से निपटने के लिए 3 अलग-अलग विकल्प देकर, क्योंकि यह लगभग एक साल पुराना है;)

सादर, राफेल प्राडो


3
उन्होंने पहले से ही ऐसा किया , और यह विफल रहा।
माइकल हैम्पटन

1
हाय माइकल, हाँ आप सही हैं। मुझे पहली बार समझ में आया कि समस्या ऑपरेटिंग सिस्टम CentOS और यूनिक्स उपयोगकर्ता अनुमतियों से संबंधित थी, इसलिए मैंने अपने उत्तर पर उस लाइन का अनुसरण किया। लेकिन नई जानकारी ने समस्या के फोकस को "होस्ट" ओपन वीजेड पर रखा, जो कुछ सेटिंग्स को सीमित करता है। मेरा ज्ञान Centos और VmWare पर है, लेकिन OpenVZ पर नहीं।
user62739

4

मुझे लगता है कि आपकी "वर्चुअल मशीन" वास्तव में एक OpenVZ कंटेनर है (जिसे आप इसे चलाकर सत्यापित कर सकते हैं virt-what)।

इस स्थिति में, आप vm.max_map_countsysctl या कई अन्य को नहीं बदल सकते । मान तय हो गए हैं।

यह एक अच्छी तरह से ज्ञात समस्या है इलास्टिसर्चैक ( # 4978 अंक )। यह सिर्फ एलेस्टिक्स की खोज नहीं है। जावा ऐप विभिन्न OpenVZ प्रदाताओं पर खराब प्रदर्शन करने के लिए अच्छी तरह से जाना जाता है, मुख्य रूप से क्योंकि मेजबान अक्सर खराब ट्यून होते हैं और इसके बारे में आप कुछ नहीं कर सकते हैं। उस मुद्दे पर एक टिप्पणीकार ने कहा कि मेरी सिफारिश क्या होगी:

joshuajonah ने 20 अक्टूबर 2015 को टिप्पणी की
यह पागल है। मुझे लगता है कि मैं केवीएम वीपीएस में बदलने जा रहा हूं।


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