编辑:自从我写这个答案以来,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_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
正确应用上面
查看这个的方法是Google/Ubuntu将它设置为'always',因为这在一般情况下是很好的,而且MongoDB建议在特殊情况下'永远'更好(特殊情况是运行MongoDB) – nos 2015-04-04 01:34:25