无法写入/ sys / kernel /以在OVH CentOS 7上禁用MongoDB的透明大页面(THP)

时间:2016-03-10 14:18:58

标签: linux mongodb centos7 ovh huge-pages

我的问题

我无法在OVH CentOS 7安装中删除有关透明大页面(THP)的MongoDB警告,问题似乎是无法以root身份写入/sys/kernel/mm

首先,我意识到OVH内核是自定义的,我知道很多人会说要使用新的非自定义内核,但现在不能选择。我需要为当前的操作系统解决这个问题。

MongoDB警告:

2016-03-09T00:31:45.889-0500 W CONTROL  [initandlisten] Failed to probe "/sys/kernel/mm/transparent_hugepage": Permission denied
2016-03-09T00:31:45.889-0500 W CONTROL  [initandlisten] Failed to probe "/sys/kernel/mm/transparent_hugepage": Permission denied

MongoDB正在尝试读取transparent_hugepage文件(如下),但它们不存在:

/sys/kernel/mm/transparent_hugepage/enabled
/sys/kernel/mm/transparent_hugepage/defrag

无法创建文件

我见过的所有解决方案都涉及创建文件并使用never填充文件,包括script in the MongoDB documentation。在所有解决方案中,这是关键部分:

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

但是,这些文件不存在,我无法在/sys/kernel/mm下以root身份创建任何内容。

root@myhost [~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
-bash: /sys/kernel/mm/transparent_hugepage/enabled: No such file or directory

root@myhost [~]# mkdir -p /sys/kernel/mm/transparent_hugepage
mkdir: cannot create directory ‘/sys/kernel/mm/transparent_hugepage’: Operation not permitted

目录/sys/kernel/mm的所有者和组是root,我暂时将权限从700更改为777,但我仍然无法以root身份创建目录。

调整后的个人资料也无法帮助

为了彻底,我还创建了自定义Tuned配置文件(根据上面的MongoDB链接中的说明)并激活它,但它生成错误WARNING tuned.plugins.plugin_vm: Option 'transparent_hugepages' is not supported on current hardware.

Tuned Profile(/etc/tuned/no-thp/tuned.conf):

[main]
include=virtual-guest

[vm]
transparent_hugepages=never

调谐日志出错:

WARNING  tuned.plugins.plugin_vm: Option 'transparent_hugepages' is not supported on current hardware.

MongoDB中的一些解决方案?

似乎最好的解决方案是以某种方式明确配置MongoDB不要使用THP,以便它不必检查丢失的文件,但我没有看到这样的事情。如果有办法,即使它涉及自定义MongoDB(并在每次更新后重复),我也愿意这样做。

1 个答案:

答案 0 :(得分:2)

现在我已经在OVH上安装了CentOS 7。他们使用/boot/bzImage-3.14.32-xxxx-grs-ipv6-64来实现grsecurityhttps://grsecurity.net),这会阻止访问某些文件夹。

可以通过替换内核来解决MongoDB关于大页面警告的非常简单的解决方案。 CentOS7的程序如下:

  1. 从OVH ftp:ftp://ftp.ovh.net/made-in-ovh/bzImage2下载所需的内核到/boot文件夹。
  2. 修改/etc/grub2.cfg

    #linux /boot/bzImage-3.14.32-xxxx-grs-ipv6-64 root = / dev / md1 ro net.ifnames = 0

    linux /boot/bzImage-4.8.17-xxxx-std-ipv6-64 root = / dev / md1 ro net.ifnames = 0

  3. 此处我将bzImage-3.14.32-xxxx-grs-ipv6-64默认值替换为bzImage-4.8.17-xxxx-std-ipv6-64,而不是grs

    现在,重新启动并检查新内核是否正常:

    root@ns506846 ~]# uname -r
    4.8.17-xxxx-std-ipv6-64