有几个问题已经在询问如何修复mongodb警告:
** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always.'
** We suggest setting it to 'never'
但我想知道是否应该修复它.我在Google云上运行的Ubuntu VM上收到MongoDB 3.0.1的警告.我应该相信MongoDB“永远不会更好”吗?或者,我应该相信Google / Ubuntu,他们将其设置为“始终”是有充分理由的吗?我想有一些权衡需要考虑,不知道我要交易什么来保留它或修复它.
询问如何修复它很好,但询问是否修复它似乎更明智.
最佳答案
编辑:自从我写这个答案以来,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(THP)旨在创建更少的大内存块,而不是具有大量内存的系统中的许多小内存块.如果您的软件需要大量连续的内存访问,这非常有用.但是,对于MongoDB,无论可用内存如何,它都需要大量较小的内存访问,因此在禁用THP时性能会更好.
这让我觉得无论哪种方式都可行,但是你可以通过关闭THP获得更好的mongo(或任何数据库)性能,从而为你提供更小的内存.如果你没有太多记忆,无论你跑什么,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
正确应用上面所做的更改