2015-04-04 2 views
3

Несколько вопросов уже спрашивают о том, как исправить предупреждение MongoDB:Почему mongodb жалуется на transparent_hugepage?

** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always.' 
**  We suggest setting it to 'never' 

Но мне интересно, если она должна быть исправлена. Я получаю это предупреждение от MongoDB 3.0.1 на виртуальной машине Ubuntu, работающей в облаке Google. Должен ли я доверять MongoDB, что «никогда» не лучше? Или я должен доверять Google/Ubuntu, что они установили его «всегда» по уважительной причине? Я думаю, что есть компромиссы, которые нужно учитывать, и не знаю, что я буду торговать, чтобы сохранить это или исправить.

Задание о том, как исправить это нормально, но спрашивает, следует ли исправить это, кажется мудрее.

+1

Способ просмотра: Google/Ubuntu установил его «всегда», так как это хорошо в общем случае, и что MongoDB предполагает, что «никогда» лучше в специальном случае (особый случай, когда вы используете MongoDB) – nos

ответ

17

Редактировать: Mongodb рассмотрел этот вопрос, так как я написал этот ответ. Их рекомендация составляет https://docs.mongodb.com/master/tutorial/transparent-huge-pages/ и, вероятно, должна быть вашим решением. Мой первоначальный ответ по-прежнему будет работать, но теперь я считаю, что официальное решение доступно.

Оригинальный ответ: Согласно документации MongoDB, http://docs.mongodb.org/manual/reference/transparent-huge-pages/ и поддержки, https://jira.mongodb.org/browse/DOCS-2131, transparent_hugepage (ТНР) предназначен для создания меньшего количества больших блоков памяти, а не много маленьких блоков памяти в системах с большим количеством памяти. Это здорово, если вашему программному обеспечению требуются большие непрерывные обращения к памяти. Тем не менее, для MongoDB, независимо от доступной памяти, для этого требуется множество небольших обращений к памяти и, следовательно, лучше работает с отключенным THP.

Это заставляет меня думать, что в любом случае это сработает, но вы получите лучшую производительность mongo (или любой базы данных) с отключенным THP, что даст вам меньшие укусы памяти. Если у вас не так много памяти, THP, вероятно, должен быть вне зависимости от того, что вы запускаете.

Несколько способов сделать это изложены в ссылке выше. Наиболее универсально применимым представляется редактирование rc.local.

$ sudo nano /etc/rc.local 

Вставьте следующие строки перед линией «выход 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 
exit 0 

Примечание: RedHat на основе системы могут использовать "redhat_transparent_hugepage", а не "transparent_hugepage" и могут быть проверены:

ls /sys/kernel/mm/*transparent_hugepage*/enabled 
cat /sys/kernel/mm/*transparent_hugepage*/enabled 

Чтобы применить изменения, перезагрузите компьютер (который будет работать rc.local) или:

$ sudo su 
# source /etc/rc.local 
# service mongod restart 
# exit 

правильно применить изменения, сделанные выше

+0

Спасибо! После этого и перезагрузки я все еще получал сообщение об ошибке. Мне нужно было перезапустить службу mongod, как вы описали, чтобы заставить ее работать. – JoeRocc

+0

Пробовал много вещей на Ubuntu 14.04, и это, наконец, сработало. Благодаря! –

+0

Также работал над Ubuntu 16.04. – davisec52

2

в Ubuntu Я использовал вариант «Init Script» этого документа: http://docs.mongodb.org/manual/tutorial/transparent-huge-pages/

+0

Это хороший и чистый способ справиться с этим! Это может быть предпочтительным для rc.local для систем, работающих в качестве серверов без головок, особенно. – mightypile

1

Ни один из них не работал для меня на экземпляре Amazon ec2 с Ubuntu 14.04, даже скрипт init.d, рекомендованный MongoDB. Мне пришлось использовать инструмент hugeadm, сначала установив его с помощью apt-get, а затем запустив sudo hugeadm --thp-never, этот post указал мне на огромный адрес. Я все еще пытаюсь выяснить, как отключить дефрагментацию transparent_hugepage. У громадмама, похоже, нет простого способа сделать это.

3

Для Ubuntu с помощью выскочки сценариев:

Поскольку мы разворачиваем машины с анзиблем мне не нравится изменение радиоуправляемых файлов или 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) и сделать.

Смежные вопросы