Как изменить & ldquo; / sys / kernel / mm / transparent_hugepage / enabled & rdquo;

Мне нравится использовать что-то вроде du --inodes -d 1, чтобы найти каталог, который рекурсивно или напрямую содержит много файлов.

Мне также нравится этот ответ: https://unix.stackexchange.com/ a / 123052

Для ленивых из нас, вот суть этого:
du --inodes -S | sort -rh | sed -n \
    '1,50{/^.\{71\}/s/^\(.\{30\}\).*\(.\{37\}\)$/\1...\2/;p}'
1
задан 2 September 2016 в 21:02

6 ответов

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

«Предпочтительный» способ - отредактировать /etc/default/grub и добавить transparent_hugepage=never в GRUB_CMDLINE_LINUX_DEFAULT, затем запустить [ f6], чтобы перестроить конфигурацию 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.

Метод «alternate» предназначен для редактирования /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

Лично я закончил делать «предпочтительные» и «альтернативные» методы, поскольку они не являются взаимоисключающими и устраняет предупреждение об defrag.

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

22
ответ дан 23 May 2018 в 22:22
  • 1
    Я попробовал это на своем однострочном сервере приложений MongoDB на DigitalOcean, и это не сработало. По-прежнему появляется одно и то же предупреждение. – scaryguy 27 August 2015 в 04:03
  • 2
    Благодарим вас за участие в EC2 и 50-cloudimg-settings.cfg – Martin Konecny 13 May 2017 в 16:42

Вот решение, которое было протестировано для работы с Ubuntu 16.04 на AWS EC2. Ubuntu 16.04 использует systemd init system, и этот файл конфигурации выражает, что эти настройки должны быть изменены до того, как 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, в котором вместо решения systemd используется решение Upstart init.

11
ответ дан 23 May 2018 в 22:22
  • 1
    Спасибо, что исправление systemd идеально подходит для современных установок MongoDB. – four43 12 March 2018 в 23:45

Добавьте следующие строки ниже в /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
ответ дан 23 May 2018 в 22:22
  • 1
    Есть ли файл конфигурации об этом? rc.local не является хорошей идеей, поскольку rc.local будет выполняться в конце запуска системы. Таким образом, служба mongodb по-прежнему будет использовать настройку по умолчанию. – Feng Yu 16 March 2015 в 18:24
  • 2
    отредактируйте файл / etc / default / grub и внесите изменения в строку " GRUB_CMDLINE_LINUX_DEFAULT = " transparent_hugepage = never " и запустите команду update-grub, а затем перезапустите сервер – PKumar 18 March 2015 в 11:51
  • 3
    Спасибо, это работает. Но есть ли способ изменить /sys/kernel/mm/transparent_hugepage/defrag? Когда я перезагружаюсь, оболочка mongo также сообщает мне «** ПРЕДУПРЕЖДЕНИЕ: / sys / kernel / mm / transparent_hugepage / defrag -« всегда ». & Quot; – Feng Yu 18 March 2015 в 17:59
  • 4
    @FengYu попробуйте эту страницу docs.mongodb.org/manual/tutorial/transparent-huge-pages – PKumar 20 October 2015 в 16:55

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

Я попытался использовать 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
[d3 ] Это запустит скрипт перед запуском mongod. Перезапустите mongod (sudo service mongod restart) и выполните.

0
ответ дан 23 May 2018 в 22:22
  • 1
    Обратите внимание, что это решение использует «Upstart». init, а Ubuntu 16.04 - система systemd init. – Mark Stosberg 2 September 2016 в 19:11

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

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

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

0
ответ дан 23 May 2018 в 22:22

GRUB изменится после обновления, а rc.local будет запущен только после запуска mongo, поэтому, возможно, нам следует добавить перезапуск службы mongo в конце 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?

-1
ответ дан 23 May 2018 в 22:22

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

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