Я получаю следующее предупреждение от 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
Как я могу избежать предупреждения?
Ответ 1
Официальная документация MongoDB дает несколько решений для этой проблемы. Вы также можете попробовать это решение, которое сработало для меня:
Примечание. Попробуйте официальные директивы документации, если версия MongoDB больше 3.0
-
Откройте /etc/init.d/mongod
файл.
(если нет такого файла, вы можете проверить /etc/init.d/mongod
, /etc/init/mongod.conf
файлы - кредит: приведенные ниже комментарии)
-
Добавьте строки ниже сразу после chown $DAEMONUSER /var/run/mongodb.pid
и до end script
.
- Перезагрузите
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
Что это!
Ответ 2
MongoDB обновили свои рекомендации по использованию init.d script:
http://docs.mongodb.org/master/tutorial/transparent-huge-pages/
Ответ 3
Для 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
Это приведет к запуску script перед запуском mongod.
Перезапустите mongod (sudo service mongod restart
) и выполните.
Ответ 4
Обновление. Если вы используете виртуального хостинг-провайдера, это будет работать. DigitalOcean НЕ поддерживает загрузку grub.
Ответ 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)
Таким образом, исправление этой ошибки заключается в том, чтобы сначала просмотреть прозрачность_hugepage/enabled, а если это не так, не смотрите на нерелевантную настройку transparent_hugepage/defrag.
Источник.
Ответ 6
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"