zoukankan      html  css  js  c++  java
  • (转)mongoDB 禁用大内存页面 transparent_hugepage=never

    最近在学mongoDB,安装倒没什么困难,有yum仓库。不过接入ctl后的一条warning倒挺让人烦心的。

    1
    2
    2015-03-22T09:27:00.222+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
    2015-03-22T09:27:00.222+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'

    如果在运行时解决这问题,也不困难,只需要修改hugepage的设置就可以了。执行下面两条命令

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

    别忘了重启你的mongoDB,这条warning就消失了。不过下次重新启动系统,这些设置就会消失。

    不过想在启动时关掉大内存页面就废了我不少时间了。

    首先是网上有人说,把上面的两行命令写入/etc/rc.local,如果是fedora21这样新的系统,应该就是/etc/rc.d/rc.local。不过这无济于事。

    我们先看看官方文档怎么说。https://www.kernel.org/doc/Documentation/vm/transhuge.txt 这是关于大内存页面的linux内核文档说明,里面是这样描述如何关闭的。

    1
    2
    3
    4
    5
    6
    == Boot parameter ==
     
    You can change the sysfs boot time defaults of Transparent Hugepage
    Support by passing the parameter "transparent_hugepage=always" or
    "transparent_hugepage=madvise" or "transparent_hugepage=never"
    (without "") to the kernel command line.

    它说要把 transparent_hugepage=never 这个参数写入 内核命令行(kernel command line)。不过这个内核命令行又在哪里呢。于是继续找,发现了红帽公司的一份补充说明 https://access.redhat.com/solutions/46111 , 里面是这样描述的。

    1
    2
    3
    4
    5
    To disable THP at boot time
     
    Append the following to the kernel command line in grub.conf:
     
    transparent_hugepage=never

    好了,离真相又更近一步了,不过我的是grub2,所以这篇文章所描述的grub.conf并不存在。继续找,发现了这两篇文章https://lists.fedoraproject.org/pipermail/users/2012-January/412889.html 跟 http://docs.mongodb.org/manual/reference/transparent-huge-pages/(mongoDB的官方文档)。这两篇终于看见光明了,为什么我一开始没翻到mongodb的官方文档?果断投诉google,你家的搜索不靠谱啊。前面一篇基本上是正确的,不过下面的命令写错了

    1
    2
    3
    grub2-mkconfig /boot/grub2/grub.cfg
    应该是
    grub2-mkconfig -o /boot/grub2/grub.cfg

    不过mongodb的官方文档还留下了这么一句话

    1
    See your operating system’s documentation for details on the precise location of the grub-legacy or grub2 configuration file.

    所以为了保险起见,我还是认真研读了 http://docs.fedoraproject.org/en-US/Fedora/21/html/System_Administrators_Guide/sec-GRUB_2_over_Serial_Console.html#sec-Configuring_GRUB_2 以防万一。

    终于在折腾了一个晚上之后,搞定了。如果你也是grub2的linux系统,请通过以下步骤关闭大内存页面。

    step1 编辑 /etc/default/grub,在GRUB_CMDLINE_LINUX加入选项 transparent_hugepage=never

    1
    2
    3
    4
    5
    6
    7
    GRUB_TIMEOUT=5
    GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
    GRUB_DEFAULT=saved
    GRUB_DISABLE_SUBMENU=true
    GRUB_TERMINAL_OUTPUT="console"
    GRUB_CMDLINE_LINUX="rd.lvm.lv=fedora/swap rd.lvm.lv=fedora/root rhgb quiet transparent_hugepage=never"
    GRUB_DISABLE_RECOVERY="true"

    step2 重新生成grub配置文件

    1
    2
    3
    4
    On BIOS-based machines, issue the following command as root:
    ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
    On UEFI-based machines, issue the following command as root:
    ~]# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg

    step3 重启你的系统

    至此大功告成,如果你使用的是grub,请把选项写入grub.conf文件就好了。

    查询hugepage状态,第一种方式

    1
    2
    3
    4
    [root@localhost yucanlin]# cat /sys/kernel/mm/transparent_hugepage/enabled
    always madvise [never]
    [root@localhost yucanlin]# cat /sys/kernel/mm/transparent_hugepage/defrag
    always madvise [never]

    never就对了。

    第二种方式

    1
    2
    3
    4
    5
    6
    7
    [yucanlin@localhost ~]$ grep Huge /proc/meminfo
    AnonHugePages:         0 kB
    HugePages_Total:       0
    HugePages_Free:        0
    HugePages_Rsvd:        0
    HugePages_Surp:        0
    Hugepagesize:       2048 kB

    0就对了。

    不过有个小遗憾,重启后我发现 enabled 是never,但defrag却依然是always,不过经过查询meminfo,大内存页面是被禁用了。就不去管他了。

  • 相关阅读:
    STS 创建 Maven 项目填坑
    JeeSite | 访问控制权限
    《Spring + MyBatis 企业应用实战》书评
    MyBatis-Generator 用法介绍
    Java描述数据结构之链表的增删改查
    Java中的Object类的几个方法
    设计模式之策略模式(Strategy Pattern)
    设计模式之模板方法(Template Method)
    JeeSite | 数据分页与翻页
    day 19
  • 原文地址:https://www.cnblogs.com/ywcz060/p/5543228.html
Copyright © 2011-2022 走看看