如何避免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,请尝试官方文档指令

  1. 打开/etc/init.d/mongod文件。
    (如果没有这样的文件,你可能会检查/etc/init/mongod.conf文件 – 信用:下面的评论)

  2. chown $DAEMONUSER /var/run/mongodb.pidend script之前立即添加下面的行。

  3. 重新启动mongodservice 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 )并完成。

  1. 打开/ etc / default / grub

    sudo vi / etc / default / grub

  2. 更新
    GRUB_CMDLINE_LINUX_DEFAULT =“”to GRUB_CMDLINE_LINUX_DEFAULT =“transparent_hugepage = never”

  3. 保存存档
    :wq(在vi中)
  4. 运行update-grub

    sudo update-grub

  5. 重新启动机器

更新:如果您正在使用虚拟主机提供商,这将工作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设置。

来源 。