如何避免来自mongodb的transparent_hugepage / defrag警告?


96

我收到mongodb关于THP的以下警告

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'

但是我确实设法手动关闭了THP

frederick@UbuntuVirtual:~$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
frederick@UbuntuVirtual:~$ cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]

我加入的伎俩transparent_hugepage=never,以GRUB_CMDLINE_LINUX_DEFAULT/etc/default/grub和添加

if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

/etc/rc.local

我到底该如何避免警告?


2
我遇到了同样的问题,但是忘了重启所有东西,包括mongod。我知道这可能是一个愚蠢的问题,但是您是否重新启动了所有内容?
Skooppa.com 2015年

1
等待...您的意思是重启mongod服务?哦...我跑sudo service mongod restart了,警告才消失了!谢谢!这很奇怪,为什么我不能重启虚拟机?
Frederick Zhang

1
不知道为什么它在重启时没有被捕获。但是,是的,我的意思是重新启动守护程序。很高兴它正在工作。
Skooppa.com 2015年

7
这不是解决方案。重新启动后看到此警告的原因是mongo守护程序已在执行rc.local之前启动。系统启动后重新启动守护程序可以解决该问题,但是下次重新启动VM时,您会再次看到该警告。很遗憾,我仍在寻找解决方案,因此无法提供解决方案。
SileNT 2015年

1
@ Frederick888即使您重新启动VM?重新启动服务可以解决警告只是暂时的。有关更多详细信息,请检查以下问题:jira.mongodb.org/browse/SERVER-17418
SileNT,2015年

Answers:


161

MongoDB官方文档为该问题提供了几种解决方案。您也可以尝试此解决方案该解决方案对我有用:

注意:如果MongoDB版本大于3.0,请尝试使用官方文档指令

  1. 打开/etc/init.d/mongod文件。
    (如果没有此类文件,您可以检查/etc/init.d/mongod/etc/init/mongod.conf文件-信用:以下注释)

  2. 在紧接chown $DAEMONUSER /var/run/mongodb.pid之前和之后添加以下行end 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

而已!


抱歉,我没有立即接受您的回答。我评论了添加到rc.local的行,并尝试了您的解决方案,它也确实对我有用。谢谢!
Frederick Zhang

6
好吧,我没有找到/etc/init/mongod.conf文件,但是我确实将这些行添加到了/etc/init.d/mongod脚本文件中,就在echo“ Starting ...”行之前,并且为我工作
Sagi Mann 2015年

2
很棒的解决方案!在Ubuntu 14.04和mongod 3上工作。–
无效

1
此方法有效,请为Ubuntu用户添加/etc/init/mongod.conf的备用条目。格拉西亚斯。
杰森·塞布林

我在conf文件为YAML格式的ubuntu上使用mongodb。是否还有其他适用的解决方案?
Pravesh Jain


10

对于使用upstart的Ubuntu 14.04:

由于我们使用Ansible部署计算机,所以我不喜欢修改rc文件或GRUB配置。

我尝试使用sysfsutils/,sysfs.conf但是在快速(或慢速)计算机上启动服务时遇到了计时问题。看起来有时mongod在sysfsutils之前启动了。有时它起作用,有时却没有。

由于mongod是一个新贵进程,因此我发现最干净的解决方案是添加/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)并完成。


8
  1. 打开/ etc / default / grub

    须藤vi / etc / default / grub


  2. GRUB_CMDLINE_LINUX_DEFAULT =“” 更新为GRUB_CMDLINE_LINUX_DEFAULT =“ transparent_hugepage =从不”

  3. 保存文件
    :wq(vi)
  4. 运行update-grub

    须藤更新

  5. 重新启动机器

更新:如果您使用的是虚拟主机提供商,则可以使用IFF grub启动。DigitalOcean不支持grub引导。


1
它对我不起作用...(是的,我有我自己的Linux计算机,带有grub引导)... :(
Pierpaolo Cira 2015年

1
请注意,如果您在使用此处提到的某些解决方案,那么在还运行“调整”的系统上,调整可能会覆盖这些解决方案。看到这里更多信息:bugzilla.redhat.com/show_bug.cgi?
id

5

验证是否已对碎片整理进行了检查,而不考虑已启用:

$ 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设置。

来源


在Oracle Linux 7上工作之后,在进行了建议的更改后,碎片整理从未消失。.终于松了一口气!!这个答案需要更多的投票!!我花了4个小时来挖掘这个问题。
Gnana '17年

4

使用systemd的Ubuntu 16.04:

systemctl edit mongod

粘贴以下内容:

[Service]
PermissionsStartOnly=true
ExecStartPre=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/enabled"
ExecStartPre=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/defrag"

1
在/usr/lib/systemd/system/mongod.service中也为Centos 7工作
捷径
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.