Как избежать предупреждения 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, и попробовал ваше решение, и оно сработало и для меня. Спасибо!
Фредерик Чжан,
6
хорошо, я не нашел файла /etc/init/mongod.conf, но я добавил эти строки в файл сценария /etc/init.d/mongod, непосредственно перед эхо-строкой «Запуск ...», и это у меня работает
Саги Манн
2
классное решение! работает на Ubuntu 14.04 и mongod 3.
недействительно
1
Это работает, добавьте альтернативную запись для /etc/init/mongod.conf для пользователей Ubuntu. грация.
Джейсон Себринг,
Я использую mongodb на ubuntu, где мой файл conf находится в формате YAML. Есть ли там альтернативное решение?
Pravesh Jain
10

Для Ubuntu 14.04 с использованием выскочки:

Поскольку мы развертываем машины с Ansible, мне не нравится изменять файлы rc или конфигурации GRUB.

Я пробовал использовать sysfsutils/, sysfs.confно столкнулся с проблемами синхронизации при запуске служб на быстрых (или медленных) машинах. Похоже, иногда mongod запускался раньше 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

    Судо vi / и т.д. / по умолчанию / grub

  2. Обновите
    GRUB_CMDLINE_LINUX_DEFAULT = "" до GRUB_CMDLINE_LINUX_DEFAULT = "transparent_hugepage = never"

  3. Сохранить файл
    : wq (в vi)
  4. Запустите update-grub

    sudo update-grub

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

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

Clrho
источник
1
У меня это не работает ... (Да, у меня есть собственная Linux-машина с загрузкой grub) ... :(
Пьерпаоло Чира
1
Обратите внимание, что если вы используете некоторые из решений, упомянутых здесь, в системе, которая также работает «настроенная», настроенная может переопределить эти решения. См. Здесь для получения дополнительной информации: bugzilla.redhat.com/show_bug.cgi?id=1189868
Деджей Клейтон 01
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 тоже
shortsteps