मैं "/ sys / कर्नेल / मिमी / पारदर्शी_हुगेपेज / सक्षम" कैसे संशोधित करूं


50

मैं mongodb 3.0 का उपयोग करता हूं और मुझे एक चेतावनी मिली है:

MongoDB shell version: 3.0.0
connecting to: test
Server has startup warnings: 
2015-03-13T16:28:29.405+0800 I CONTROL  [initandlisten] 
2015-03-13T16:28:29.406+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2015-03-13T16:28:29.406+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2015-03-13T16:28:29.406+0800 I CONTROL  [initandlisten] 
2015-03-13T16:28:29.407+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2015-03-13T16:28:29.407+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2015-03-13T16:28:29.407+0800 I CONTROL  [initandlisten]

~# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

~# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never

मैं इको का उपयोग करने की कोशिश करता हूं, लेकिन यह स्थायी नहीं है, रिबूट के बाद इसे रीसेट किया जाएगा।

echo never > /sys/kernel/mm/transparent_hugepage/defrag

मैं /sys/kernel/mm/transparent_hugepage/enabledस्थायी रूप से कैसे संशोधित करूं ?


1
नीचे अच्छे उत्तर हो सकते हैं, लेकिन IMO पर आपको MongoDB के आधिकारिक दस्तावेज़: docs.mongodb.org/master/tutorial/transparent-huge-pages
hgoebl

जवाबों:


70

आप ऐसा कर सकते हैं

  1. sysfsutilsपैकेज स्थापित करें :

    sudo apt install sysfsutils
    
  2. और उस सेटिंग के साथ एक पंक्ति जोड़ें /etc/sysfs.conf:

    kernel/mm/transparent_hugepage/enabled = never
    

यह सबसे साफ समाधान है, क्योंकि यह कस्टम स्टार्ट-अप स्क्रिप्ट पर निर्भर होने के बजाय सभी sysfs कॉन्फ़िगरेशन को एक स्थान पर रखता है। स्क्रिप्ट और सशर्त अभिव्यक्तियों के साथ अन्य उत्तर उपयुक्त हैं, यदि आप नहीं जानते हैं कि कर्नेल किस रास्ते से उस सेटिंग को उजागर करेगा, अर्थात यदि आपके पास प्रभावित मशीन पर चलने वाले कर्नेल संस्करण का कोई मोटा विचार नहीं है।


4
इसने मेरे लिए Ubuntu 14.04 पर AWS EC2 उदाहरण पर कुछ नहीं किया। मैं sysfs.conf के बारे में बहुत कुछ नहीं जानता, लेकिन यह एक उबंटू समर्थित कॉन्फ़िगरेशन प्रतीत होता है, फिर भी फ़ाइल हमारे सिस्टम पर पहले से मौजूद नहीं थी, और इसे जोड़ने और रीबूट करने से मोंगो आउटपुट चेतावनियों में बदलाव नहीं हुआ। इसके अलावा, नीचे दिए गए सलाह के लिए 'डिफ्रैग' चेतावनी दिखाई गई। आधिकारिक मोंगो डॉक्स इनिट स्क्रिप्ट ने दोनों चेतावनियों को हटा दिया।
नेक

का आउटपुट क्या है cat /sys/kernel/mm/transparent_hugepage/enabled? क्या यह बिल्कुल मौजूद है? sysfs.confआमतौर पर बूट द्वारा मूल्यांकन किया जाता है /etc/init.d/sysutils। क्या यह सक्षम है? क्या होता है, जब आप आह्वान करते हैं /etc/init.d/sysutils start?
डेविड फ़ॉस्टर

3
मैं भी नहीं है sysfs.confफ़ाइल और /etc/init.d/sysutils। ubuntu 16.04
हेक्स

1
@unhammer: नहीं, दोनों में एक अलग स्कोप है। sysctlसेटिंग्स के लिए है जिसे आप कर्नेल मापदंडों के साथ भी प्राप्त कर सकते हैं; sysfs.confमें प्रविष्टियों के लिए है /sys
डेविड फ़ॉस्टर

1
@navossoc: क्या आप एक नया प्रश्न खोल सकते हैं यदि आपके पास कोई नया या अनुवर्ती प्रश्न है? टिप्पणी अनुभाग नए प्रश्नों या विस्तारित चर्चा के लिए उपयुक्त या अभिप्रेत नहीं है। मेरा ध्यान आकर्षित करने के लिए अधिसूचना के साथ एक टिप्पणी भेजने के लिए आपका स्वागत है। धन्यवाद।
डेविड फ़ॉस्टर 01

25

MongoDB डॉक्स में कुछ सुझाव हैं। http://docs.mongodb.org/manual/reference/transparent-huge-pages/

"पसंदीदा" जिस तरह से संपादित करने के लिए है /etc/default/grubऔर संलग्न transparent_hugepage=neverकरने के लिए GRUB_CMDLINE_LINUX_DEFAULTतो चलाने update-grubGRUB विन्यास के पुनर्निर्माण के लिए।

निम्नलिखित दो-लाइनर बस यही करेंगे। आउटपुट को सत्यापित करना सुनिश्चित करें!

sed -r 's/GRUB_CMDLINE_LINUX_DEFAULT="[a-zA-Z0-9_= ]*/& transparent_hugepage=never/' /etc/default/grub | sudo tee /etc/default/grub
sudo update-grub

ध्यान दें कि के update-grubलिए एक आवरण है grub-mkconfig। से उन लोगों के साथ grub-mkconfigक्लोब एंट्री करेगा । यदि संयोग से आप AWS पर चल रहे हैं, तो आपको इसके बजाय संपादित करने की आवश्यकता होगी ।/etc/default/grub/etc/default/grub.d/*/etc/default/grub.d/50-cloudimg-settings.cfg

"वैकल्पिक" विधि /etc/rc.localनिम्नलिखित से पहले संपादित करने और जोड़ने के लिए है exit 0:

if test -f /sys/kernel/mm/transparent_hugepage/khugepaged/defrag; then
  echo 0 > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
  echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
  echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi

व्यक्तिगत रूप से, मैंने "पसंदीदा" और "वैकल्पिक" दोनों तरीकों को करना समाप्त कर दिया क्योंकि वे पारस्परिक रूप से अनन्य नहीं हैं और यह डीफ़्रैग के लिए चेतावनी को समाप्त करता है।

* मेरे लिए Ubuntu 14.04, MongoDB 3.0.2 और AWS पर काम किया।


मैंने DigitalOcean पर अपने एक-क्लिक MongoDB एप्लिकेशन सर्वर पर यह कोशिश की और यह काम नहीं किया। अभी भी वही चेतावनी संदेश मिल रहा है।
scaryguy

EC2 और50-cloudimg-settings.cfg
मार्टिन कोन्सेनी के

16

यहाँ एक समाधान है जिसे AWS EC2 पर Ubuntu 16.04 पर काम करने के लिए परीक्षण किया गया है। Ubuntu 16.04 systemd init सिस्टम का उपयोग करता है, और यह कॉन्फिग फाइल यह व्यक्त करती है कि MongoDB बूट होने से पहले इन सेटिंग्स को बदल दिया जाना चाहिए।

नाम की एक फ़ाइल बनाएँ /etc/systemd/system/mongodb-hugepage-fix.serviceऔर निम्नलिखित सामग्री जोड़ें:

[Unit]
Description="Disable Transparent Hugepage before MongoDB boots"
#WARN: check service name on your system
# If you are using MongoDB Cloud, service name is "mongodb-mms-automation-agent.service"
Before=mongodb.service      

[Service]
Type=oneshot
ExecStart=/bin/bash -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'
ExecStart=/bin/bash -c 'echo never > /sys/kernel/mm/transparent_hugepage/defrag'

[Install]
#WARN: check service name on your system
# If you are using MongoDB Cloud, service name is "mongodb-mms-automation-agent.service"
RequiredBy=mongodb.service

फ़ाइल को सिस्टमड में लोड करने के लिए:

systemctl daemon-reload

MongoDB की बूट-टाइम निर्भरता के रूप में फ़ाइल को सक्रिय करने के लिए

systemctl enable mongodb-hugepage-fix

यदि आप परिवर्तनों को तुरंत सक्रिय करना चाहते हैं (अगले बूट से पहले)

systemctl start mongodb-hugepage-fix
systemctl restart mongod

यह समाधान Ubuntu 14.04 के लिए उपयुक्त नहीं है , जो सिस्टमड के बजाय अपस्टार्ट इनिट समाधान का उपयोग करता है।


1
सिस्टेम फिक्स आधुनिक MongoDB इंस्टॉल के लिए एकदम सही है, धन्यवाद।
चार ४३

7

नीचे दी गई पंक्तियों को /etc/rc.local में संलग्न करें।

if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
  echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi

if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

जब आप सर्वर को रिबूट करेंगे तो यह चलेगा।


1
क्या इस बारे में कोई कॉन्फिगर फाइल है? rc.localएक अच्छा विचार नहीं है, क्योंकि rc.local सिस्टम स्टार्ट के अंत में निष्पादित होगा। तो mongodb सेवा अभी भी डिफ़ॉल्ट सेटिंग का उपयोग करेगी।
फेंग यू

2
/ etc / default / grub फ़ाइल को संपादित करें और लाइन में परिवर्तन करें "GRUB_CMDLINE_LINUX_DEFAULT =" पारदर्शी_हुगेपेज = कभी नहीं "और फिर अपडेट-ग्रब कमांड चलाएं फिर सर्वर को फिर से शुरू करें
PKumar

2
धन्यवाद, यह काम करता है। लेकिन, क्या संशोधित करने का एक समान तरीका है /sys/kernel/mm/transparent_hugepage/defrag? जब मैं रिबूट करता हूं, तो मोंगो शेल मुझे यह भी बताता है "** चेतावनी: / sys / कर्नेल / मिमी / पारदर्शी_हुगेपेज / डीफ़्रैग 'हमेशा' है।"
फेंग यू


0

उन्नयन के बाद GRUB बदल जाएगा, और rc.local केवल mongo शुरू होने के बाद चलेगा, इसलिए शायद हमें इस तरह r rllocal के अंत में सेवा मोंगो पुनरारंभ जोड़ना चाहिए

अगर परीक्षण -f / sys / कर्नेल / मिमी / पारदर्शी_ह्यूज़पेज / सक्षम; फिर
  इको कभी नहीं> / sys / कर्नेल / मिमी / पारदर्शी_हुगेपेज / सक्षम
फाई

अगर परीक्षण -f / sys / कर्नेल / मिमी / पारदर्शी_ह्यूज़पेज / डीफ़्रेग; फिर
   गूंज कभी नहीं> / sys / कर्नेल / मिमी / पारदर्शी_हुगेपेज / डीफ़्रेग
फाई

प्रतीक्षा करें 1 && सर्वि मैंगोड पुनः आरंभ करें

या हो सकता है कि किसी ने सफलतापूर्वक उबंटू स्क्रिप्ट में उपरोक्त पंक्तियों को Ubuntu 14.04 में जोड़ा हो?


0

चूँकि हम Ansible के साथ मशीनों को तैनात कर रहे हैं इसलिए मुझे rc फ़ाइलों को संशोधित करना पसंद नहीं है।

मैंने तेज / (या धीमी मशीनों) पर सेवाओं को शुरू करते समय sysfsutils/ sysfs.confलेकिन समय के मुद्दों में उपयोग करने की कोशिश की । ऐसा लग रहा था कि कभी-कभी sysfsutils से पहले mongod शुरू कर दिया गया था। कभी-कभी यह काम करता था, कभी-कभी ऐसा नहीं होता था।

चूंकि मोंगॉड एक अपस्टार्ट प्रक्रिया है, इसलिए मैंने पाया कि सबसे साफ समाधान /etc/mongo_vm_settings.confनिम्न सामग्री के साथ फाइल को जोड़ना था :

# Ubuntu upstart file at /etc/init/mongod_vm_settings.conf
#
#   This file will set the correct kernel VM settings for MongoDB
#   This file is maintained in Ansible

start on (starting mongod)
script
  echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
  echo "never" > /sys/kernel/mm/transparent_hugepage/defrag
end script

यह स्क्रिप्ट शुरू होने से ठीक पहले चलेगा। मोंगॉड ( sudo service mongod restart) और किया गया।


ध्यान दें कि यह समाधान "अपस्टार्ट" इनिट सिस्टम का उपयोग करता है, जबकि उबंटू 16.04 सिस्टमड इनिट सिस्टम पर आधारित है।
मार्क स्टोसबर्ग

0

चेतावनी लॉग में थोड़ा पढ़ने के बाद मैंने इन दोनों लाइनों को /etc/sysfs.confy voilá में जोड़ दिया है

kernel/mm/transparent_hugepage/enabled = never
kernel/mm/transparent_hugepage/defrag = never

इन परिवर्तनों को लागू करने के बाद मशीन को रिबूट करें।


अभी भी sysfsutilsपैकेज की आवश्यकता है (मेरा उत्तर देखें)।
डेविड फ़ॉस्टर

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