編輯:自從我寫這個答案以來,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