Як уникнути застереження transparent_hugepage / defrag від mongodb?


96

Я отримую таке попередження від mongodb щодо THP

2015-03-06T21:01:15.526-0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2015-03-06T21:01:15.526-0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'

Але мені вдалося вимкнути THP вручну

frederick@UbuntuVirtual:~$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
frederick@UbuntuVirtual:~$ cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]

Я зробив трюк, додавши transparent_hugepage=neverдо GRUB_CMDLINE_LINUX_DEFAULTв /etc/default/grubі додавання

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

до /etc/rc.local

Яким чином я можу уникнути попередження?


2
У мене була та сама проблема, але я забув перезавантажити все, включаючи mongod. Я знаю, що це може бути дурне запитання, але ти все перезавантажив?
Skooppa.com

1
почекайте ... ви мали на увазі перезапустити службу mongod? о ... я побіг, sudo service mongod restartа попередження просто зникло! Дякую! це дивно, чому я не можу просто перезавантажити віртуальну машину?
Фредерік Чжан

1
Не впевнений, чому це не вдалося перезавантажити. Але так, я мав на увазі перезапустити демон. Радий, що це працює.
Skooppa.com

7
Це не рішення. Причиною того, що ви бачите це попередження після перезавантаження, є те, що демон mongo запускається до того, як ваш rc.local був запущений. Перезапуск демона після завантаження системи вирішить проблему, але наступного разу при перезавантаженні віртуальної машини ви знову побачите це приємне попередження. На жаль, я не можу дати вам рішення, оскільки я все ще шукаю його.
SileNT

1
@ Frederick888 Навіть якщо ви перезавантажуєте віртуальну машину? Перезапуск служби вирішує попередження лише тимчасово. Детальніше див. У цьому випуску: jira.mongodb.org/browse/SERVER-17418
SileNT,

Відповіді:


161

Офіційна документація MongoDB пропонує кілька рішень для цього питання. Ви також можете спробувати це рішення , яке працювало для мене:

Примітка: Спробуйте інструкції з офіційної документації, якщо версія MongoDB перевищує 3.0

  1. Відкрити /etc/init.d/mongodфайл.
    (якщо немає такого файлу, який ви можете перевірити /etc/init.d/mongod, /etc/init/mongod.confфайли - кредит: коментарі нижче)

  2. Додайте рядки нижче відразу після chown $DAEMONUSER /var/run/mongodb.pidі до цього end script.

  3. Перезапустіть mongod( service mongod restart).

Ось рядки, які слід додати /etc/init.d/mongod:

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

Це воно!


Вибачте, що я не відразу прийняв вашу відповідь. Я коментую рядки, які я додав до rc.local out, і спробував ваше рішення, і це спрацювало і для мене. Дякую!
Фредерік Чжан,

6
ну, я не знайшов /etc/init/mongod.conf файл, але додав ці рядки у файл скрипта /etc/init.d/mongod, безпосередньо перед рядком "Starting ...", і він працює для мене
Сагі Манн

2
чудове рішення! працює над Ubuntu 14.04 і mongod 3.
недійсним

1
Це працює, будь ласка, додайте альтернативний запис для /etc/init/mongod.conf для користувачів Ubuntu. грації.
Джейсон Себрінг,

Я використовую mongodb на ubuntu, де мій файл конфігурації має формат YAML. Чи є там альтернативне рішення застосовне?
Pravesh Jain


10

Для Ubuntu 14.04 з використанням програми upstart:

Оскільки ми розгортаємо машини з Ansible, мені не подобається змінювати rc-файли або конфігурації GRUB.

Я намагався використовувати sysfsutils/, sysfs.confале при запуску служб на швидких (або повільних машинах) зіткнувся з проблемами з термінами. Здавалося, іноді монгод був запущений ще до sysfsutils. Іноді це спрацьовувало, іноді ні.

Оскільки mongod - це процес запуску, я виявив, що найчистішим рішенням було додати файл /etc/init/mongod_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

Це запустить скрипт безпосередньо перед запуском mongod. Перезапустіть mongod ( sudo service mongod restart) і готово.


8
  1. Відкрийте / etc / default / grub

    sudo vi / etc / default / grub

  2. Оновіть
    GRUB_CMDLINE_LINUX_DEFAULT = "" до GRUB_CMDLINE_LINUX_DEFAULT = "transparent_hugepage = ніколи"

  3. Зберегти файл
    : wq (in vi)
  4. Запустіть update-grub

    sudo update-grub

  5. Перезавантажте машину

Оновлення: Якщо ви використовуєте провайдера віртуального хостингу, це спрацює, якщо завантаження грубого завантаження IFF підтримується. DigitalOcean НЕ підтримує завантаження grub.


1
У мене це не працює ... (Так, у мене є своя машина Linux, із завантажувачем grub) ... :(
Pierpaolo Cira 20.03.15

1
Зверніть увагу, що якщо ви використовуєте деякі згадані тут рішення, в системі, яка також працює "налаштовано", налаштований може замінити ці рішення. Дивіться тут для отримання додаткової інформації: bugzilla.redhat.com/show_bug.cgi?id=1189868
Dejay Clayton

5

Перевірено, що дефрагментацію перевіряють без урахування увімкненого:

$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
$ cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
$ service mongod start
... (in log) WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'
$ echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag
$ cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
$ service mongod stop
$ service mongod start
... (no warning in log)

Отже, виправлення цієї помилки полягає в тому, щоб спочатку подивитися на transparent_hugepage / enabled, і якщо це ніколи, не турбуйтеся, дивлячись на нерелевантний параметр transparent_hugepage / defrag.

Джерело .


Працюючи над Oracle Linux 7, дефрагментація ніколи не зникала після рекомендованих змін .. нарешті, зітхнула з полегшенням !! ця відповідь потребує більше голосів !! Я витратив 4 години, викопуючи це.
Gnana

4

Ubuntu 16.04 з використанням systemd:

systemctl edit mongod

Вставте наступне:

[Service]
PermissionsStartOnly=true
ExecStartPre=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/enabled"
ExecStartPre=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/defrag"

1
працював на Centos 7 у /usr/lib/systemd/system/mongod.service теж
короткі кроки
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.