it-swarm.com.ru

Как избежать предупреждения transparent_hugepage / defrag от mongodb?

Я получаю следующее предупреждение от 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 вручную

[email protected]:~$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
[email protected]:~$ 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

Как же я могу избежать предупреждения?

95
Frederick Zhang

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

Примечание: попробуйте официальные директивы документации , если версия MongoDB больше 3.0

  1. Откройте файл /etc/init.d/mongod.
    (если такого файла нет, вы можете проверить /etc/init.d/mongod, /etc/init/mongod.conf files - credit: комментарии ниже)

  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

Это оно!

161
efkan

MongoDB обновили свои рекомендации по использованию сценария init.d : http://docs.mongodb.org/master/tutorial/ прозрачно-огромная-страница /

24
robbie613

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

Поскольку мы развертываем машины с помощью 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) и готово.

10
Whyhankee
  1. Откройте/etc/default/grub

    Sudo vi/etc/default/grub

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

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

    Sudo update-grub

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

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

8
clrho

Проверено, что дефрагментация проверена без учета включенного:

$ 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.

Источник .

5
Michael Horojanski

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
snap