Как я изменяю “/sys/kernel/mm/transparent_hugepage/enabled”

Я использую 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 постоянно?

50
задан 2 September 2016 в 11:02

7 ответов

Вы можете

  1. , устанавливают sysfsutils пакет:

    sudo apt install sysfsutils
    
  2. и добавляют строку с той установкой на /etc/sysfs.conf:

    kernel/mm/transparent_hugepage/enabled = never
    

Это - самое чистое решение, потому что это сохраняет всю sysfs конфигурацию в одном месте вместо того, чтобы полагаться на пользовательские сценарии запуска. Другие ответы, со сценариями и условными выражениями, подходят, если Вы не хорошо знаете, какой путь ядро представит ту установку, т.е. если у Вас даже нет общего представления о версии ядра, работающей на затронутой машине.

70
ответ дан 22 November 2019 в 23:52

Вот решение, которое было протестировано для работы над Ubuntu 16.04 на AWS EC2. Ubuntu 16.04 использует systemd init система, и этот файл конфигурации выражает, что эти настройки должны быть изменены, прежде чем MongoDB загрузится.

Создают файл, названный /etc/systemd/system/mongodb-hugepage-fix.service, и добавляют следующее содержание:

[Unit]
Description="Disable Transparent Hugepage before MongoDB boots"
#WARN: check service name on your system
# If you are using MongoDB Cloud, service name is "mongodb-mms-automation-agent.service"
Before=mongodb.service      

[Service]
Type=oneshot
ExecStart=/bin/bash -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'
ExecStart=/bin/bash -c 'echo never > /sys/kernel/mm/transparent_hugepage/defrag'

[Install]
#WARN: check service name on your system
# If you are using MongoDB Cloud, service name is "mongodb-mms-automation-agent.service"
RequiredBy=mongodb.service

Для загрузки файла в systemd:

systemctl daemon-reload

Для активации файла как зависимости времени начальной загрузки MongoDB

systemctl enable mongodb-hugepage-fix

, Если Вы хотите активировать изменения сразу (прежде чем следующая начальная загрузка)

systemctl start mongodb-hugepage-fix
systemctl restart mongod

Это решение не подходящее для Ubuntu 14.04, которая использует Выскочку init решение вместо systemd.

16
ответ дан 22 November 2019 в 23:52

Добавьте следующие строки ниже в/etc/rc.local.

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

Это будет работать при перезагрузке сервера.

7
ответ дан 22 November 2019 в 23:52

Так как мы развертываем машины с Ansible, мне не нравится изменять емкостно-резистивные файлы.

я попытался использовать sysfsutils / sysfs.conf, но столкнулся с синхронизацией проблем при запуске сервисов на быстрый (или медленные машины). Это иногда было похоже mongod, был запущен прежде sysfsutils. Иногда это работало, иногда это не делало.

, Так как mongod является новомодным процессом, я нашел, что самое чистое решение состояло в том, чтобы добавить файл /etc/mongo_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) и сделанный.

0
ответ дан 22 November 2019 в 23:52

ЛИЧИНКА изменится после того, как модернизация и rc.local будут бежать только после того, как монго начато, поэтому возможно, мы должны добавить сервисный перезапуск монго в конце rc.local как это

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

wait 1 && servie mongod restart

, или возможно кто-то успешно добавил линии выше к init сценарию в Ubuntu 14.04?

0
ответ дан 22 November 2019 в 23:52

Документы MongoDB имеют несколько предложений. http://docs.mongodb.org/manual/reference/transparent-huge-pages/

"Предпочтительный" путь состоит в том, чтобы отредактировать /etc/default/grub и добавьте transparent_hugepage=never кому: GRUB_CMDLINE_LINUX_DEFAULT затем выполненный update-grub восстановить конфигурацию GRUB.

Следующий с двумя лайнерами сделает просто это. Удостоверьтесь, что проверили вывод!

sed -r 's/GRUB_CMDLINE_LINUX_DEFAULT="[a-zA-Z0-9_= ]*/& transparent_hugepage=never/' /etc/default/grub | sudo tee /etc/default/grub
sudo update-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:

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

Лично, я закончил тем, что делал обоих "предпочтительные" и "альтернативные" методы, так как они не являются взаимоисключающими, и это устраняет предупреждение о дефрагментации.

* Работавший для меня на Ubuntu 14.04, MongoDB 3.0.2 и AWS.

25
ответ дан 22 November 2019 в 23:52

После чтения немного в журнале предупреждения я включил эти две строки /etc/sysfs.conf y voilá

kernel/mm/transparent_hugepage/enabled = never
kernel/mm/transparent_hugepage/defrag = never

Перезагрузите машину после применения этих изменений.

0
ответ дан 22 November 2019 в 23:52

Другие вопросы по тегам:

Похожие вопросы: