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

Fre*_*ang 95 linux linux-kernel mongodb

我收到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'
Run Code Online (Sandbox Code Playgroud)

但我确实设法手动关闭了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]
Run Code Online (Sandbox Code Playgroud)

我加入的伎俩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
Run Code Online (Sandbox Code Playgroud)

至 /etc/rc.local

我怎么能避免警告?

efk*_*kan 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. 重启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
Run Code Online (Sandbox Code Playgroud)

而已!

  • 好吧,我没有找到/etc/init/mongod.conf文件,但我确实将这些行添加到/etc/init.d/mongod脚本文件中,就在回显"Starting ..."行之前,它适合我 (6认同)
  • 很棒的解决方案!适用于Ubuntu 14.04和mongod 3. (2认同)

rob*_*613 24

MongoDB已经更新了他们现在使用init.d脚本的建议:http: //docs.mongodb.org/master/tutorial/transparent-huge-pages/

  • 这是ubuntu 16.04及以上版本的正确答案 (4认同)

Why*_*kee 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
Run Code Online (Sandbox Code Playgroud)

这将在mongod启动之前运行脚本.重启mongod(sudo service mongod restart)并完成.


clr*_*rho 8

  1. 打开/ etc/default/grub

    sudo vi/etc/default/grub

  2. 将
    GRUB_CMDLINE_LINUX_DEFAULT ="" 更新为GRUB_CMDLINE_LINUX_DEFAULT ="transparent_hugepage = never"

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

    sudo update-grub

  5. 重启机器

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


Mic*_*ski 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)
Run Code Online (Sandbox Code Playgroud)

因此,修复此错误的方法是首先查看transparent_hugepage/enabled,如果它永远不会,请不要费心查看无关的transparent_hugepage/defrag设置.

来源.


sna*_*nap 5

使用 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"
Run Code Online (Sandbox Code Playgroud)

  • Centos 7 也适用于 /usr/lib/systemd/system/mongod.service (2认同)