如何避免mongodb中的transparent_hugepage / defrag警告?
我收到了关于THP的关于mongodb的以下警告
2015-03-06T21:01:15.526-0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. 2015-03-06T21:01:15.526-0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
但我确实设法手动closuresTHP
frederick@UbuntuVirtual:~$ cat /sys/kernel/mm/transparent_hugepage/enabled always madvise [never] frederick@UbuntuVirtual:~$ cat /sys/kernel/mm/transparent_hugepage/defrag always madvise [never]
我做了诀窍,在/etc/default/grub
添加了transparent_hugepage=never
GRUB_CMDLINE_LINUX_DEFAULT
并添加
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then echo never > /sys/kernel/mm/transparent_hugepage/defrag fi
到/etc/rc.local
我怎样才能避免这个警告?
正式的MongoDB文档为这个问题提供了几种解决scheme。 你也可以尝试这个解决scheme ,它为我工作:
注意: 如果MongoDB版本大于3.0,请尝试官方文档指令
-
打开
/etc/init.d/mongod
文件。
(如果没有这样的文件,你可能会检查/etc/init/mongod.conf
文件 – 信用:下面的评论) -
在
chown $DAEMONUSER /var/run/mongodb.pid
和end script
之前立即添加下面的行。 - 重新启动
mongod
(service mongod restart
)。
这里是添加到/etc/init.d/mongod
的行:
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
而已!
MongoDB已经更新了他们的build议,现在使用init.d脚本: http : //docs.mongodb.org/master/tutorial/transparent-huge-pages/
对于使用新贵的Ubuntu 14.04:
由于我们正在使用Ansible部署机器,因此我不喜欢修改rc文件或GRUBconfiguration。
我尝试使用sysfsutils
/ sysfs.conf
但在快速(或慢速机器)上启动服务时遇到了计时问题。 看起来有时候mongod是在sysfsutils之前启动的。 有时它起作用,有时它不起作用。
由于mongod是一个暴发户的过程,我发现最简洁的解决scheme是添加文件/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
)并完成。
-
打开/ etc / default / grub
sudo vi / etc / default / grub
-
更新
GRUB_CMDLINE_LINUX_DEFAULT =“”to GRUB_CMDLINE_LINUX_DEFAULT =“transparent_hugepage = never” - 保存存档
:wq(在vi中) -
运行update-grub
sudo update-grub
-
重新启动机器
更新:如果您正在使用虚拟主机提供商,这将工作IFF GRUB引导是支持的。 DigitalOcean不支持grub引导。
validation磁盘碎片整理检查不考虑启用:
$ cat /sys/kernel/mm/transparent_hugepage/enabled always madvise [never] $ cat /sys/kernel/mm/transparent_hugepage/defrag [always] madvise never $ service mongod start ... (in log) WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always' $ echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag $ cat /sys/kernel/mm/transparent_hugepage/defrag always madvise [never] $ service mongod stop $ service mongod start ... (no warning in log)
因此,解决这个问题的方法是首先查看transparent_hugepage / enabled,如果不是的话,不要费神去查看不相关的transparent_hugepage / defrag设置。
来源 。