Я использую 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
навсегда?
Ответы:
Ты можешь
установить
sysfsutils
пакет:и добавьте строку с этим параметром в
/etc/sysfs.conf
:Это самое чистое решение, поскольку оно хранит всю конфигурацию sysfs в одном месте, а не полагается на пользовательские сценарии запуска. Другие ответы, со сценариями и условными выражениями, подходят, если вы не знаете, по какому пути ядро будет выставлять эту настройку, т. Е. Если у вас даже нет приблизительного представления о версии ядра, работающей на зараженной машине.
источник
cat /sys/kernel/mm/transparent_hugepage/enabled
? Существует ли оно вообще?sysfs.conf
обычно оценивается при загрузке с/etc/init.d/sysutils
. Это включено? Что происходит, когда вы вызываете/etc/init.d/sysutils start
?sysfs.conf
файла и/etc/init.d/sysutils
. Ubuntu 16.04sysctl
для настроек, которые вы также можете достичь с помощью параметров ядра;sysfs.conf
для записей в/sys
.В документации MongoDB есть несколько предложений. http://docs.mongodb.org/manual/reference/transparent-huge-pages/
«Предпочтительный» способ заключается в редактировании
/etc/default/grub
и присоединятьtransparent_hugepage=never
к аGRUB_CMDLINE_LINUX_DEFAULT
затем запустить ,update-grub
чтобы восстановить конфигурацию GRUB.Следующий двухслойный будет делать именно это. Обязательно проверьте вывод!
Обратите внимание, что
update-grub
это обертка дляgrub-mkconfig
.grub-mkconfig
будет забивать записи/etc/default/grub
с теми из/etc/default/grub.d/*
. Если случайно вы работаете в AWS, вам нужно будет отредактировать/etc/default/grub.d/50-cloudimg-settings.cfg
.«Альтернативный» метод заключается в редактировании
/etc/rc.local
и добавлении следующегоexit 0
:Лично я закончил тем, что сделал оба «предпочтительных» и «альтернативных» метода, так как они не являются взаимоисключающими, и это устраняет предупреждение о дефрагментации.
* Работал для меня на Ubuntu 14.04, MongoDB 3.0.2 и AWS.
источник
50-cloudimg-settings.cfg
Вот решение, которое было протестировано для работы на Ubuntu 16.04 на AWS EC2. Ubuntu 16.04 использует systemd init system, и этот файл конфигурации показывает, что эти параметры должны быть изменены до загрузки MongoDB.
Создайте файл с именем
/etc/systemd/system/mongodb-hugepage-fix.service
и добавьте следующее содержимое:Чтобы загрузить файл в systemd:
Чтобы активировать файл как загрузочную зависимость MongoDB
Если вы хотите активировать изменения немедленно (до следующей загрузки)
Это решение не подходит для Ubuntu 14.04, в которой вместо systemd используется решение инициализации Upstart.
источник
Добавьте следующие строки ниже в /etc/rc.local.
Это запустится при перезагрузке сервера.
источник
rc.local
не очень хорошая идея, потому что rc.local будет выполняться в конце загрузки системы. Так что сервис mongodb по-прежнему будет использовать настройки по умолчанию./sys/kernel/mm/transparent_hugepage/defrag
? Когда я перезагружаюсь, оболочка mongo также говорит мне: «** ПРЕДУПРЕЖДЕНИЕ: / sys / kernel / mm / transparent_hugepage / defrag - это всегда».GRUB изменится после обновления, а rc.local будет работать только после запуска mongo, поэтому, возможно, нам следует добавить перезапуск службы mongo в конце rc.local, например так
или, может быть, кто-то успешно добавил строки выше в сценарий инициализации в Ubuntu 14.04?
источник
Поскольку мы разворачиваем машины с помощью Ansible, я не люблю модифицировать rc-файлы.
Я пытался использовать
sysfsutils
/,sysfs.conf
но столкнулся с проблемами синхронизации при запуске служб на быстрых (или медленных машинах). Похоже, иногда mongod запускался до sysfsutils. Иногда это работало, иногда нет.Поскольку mongod - процесс выскочки, я обнаружил, что самым чистым решением было добавить файл
/etc/mongo_vm_settings.conf
со следующим содержимым:Это запустит скрипт непосредственно перед запуском mongod. Перезапустите mongod (
sudo service mongod restart
) и готово.источник
Прочитав немного в журнале предупреждений, я добавил эти две строки в
/etc/sysfs.conf
y voiláПерезагрузите машину после применения этих изменений.
источник
sysfsutils
пакета (см. Мой ответ).