• Linux的Transparent Hugepage与关闭方法


    Transparent HugePages是在运行时动态分配内存的,而标准的HugePages是在系统启动时预先分配内存,并在系统运行时不再改变。
    因为Transparent HugePages是在运行时动态分配内存的,所以会带来在运行时内存分配延误。所以ORACLE是建议不使用Transparent HugePages功能的,如果需要大页内存管理功能来加强性能,建议使用标准的大页内存管理。
    MYSQL的TOKUDB强制必须关闭Transparent HugePages功能,否则启动不了数据库。
     
    下面是ORACLE官方的文档:
    下面有关于Transparent HugePages查看和关闭的方式
    https://docs.oracle.com/cd/E11882_01/install.112/e41961/memry.htm#CWLIN385
     

    1.什么是Transparent HugePages?
    Transparent HugePages是RHEL6的新特性。
    为了提升性能,Kernel会将程序缓存在内存中,每页内存以2M为单位。
    想要有效的使用THP,kernel要在内存中找到一系列连续的物理内存来满足需求,也可能会对齐。
    为了达到这个效果,系统新加了一个khugepaged进程,这个进程会偶尔尝试把正在使用的较小页面换到hugepage中。这样就能使hugepage使用达到最大化。


    2.如何关闭THP
    尽管THP的本意是为提升性能,但某些数据库厂商还是建议直接关闭THP(比如说Oracle、MongoDB等),否则可能导致性能下降,内存锁,甚至系统重启等问题。
    比较流行的关闭方法有两种
    第一种:在/etc/rc.local中加入如下两行
    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
    第二种:
    1 .编辑 /etc/default/grub,在GRUB_CMDLINE_LINUX加入选项 transparent_hugepage=never
    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"
    2.重新生成grub配置文件
    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 重启你的系统
    验证结果
    重启前
    # cat /sys/kernel/mm/transparent_hugepage/defrag
    [always] madvise never
    #
    # cat /sys/kernel/mm/transparent_hugepage/enabled
    [always] madvise never
    #
    # cat /sys/kernel/mm/transparent_hugepage/defrag
    always madvise [never]
    #
    重启后
    # cat /sys/kernel/mm/transparent_hugepage/enabled
    always madvise [never]
    #

  • 相关阅读:
    SpringCloud微服务基础学习
    EF6 + MySql 建立项目引用失败
    Forword(请求转发)与Redirect(重定向)区别
    Java 中 Hashtable与HashMap的区别
    cookie和session
    configparser模块的简单使用
    列表中的陷阱
    Python3面向对象编程总结
    Python---RabbitMQ的使用
    Django的template自定义函数的创建和使用
  • 原文地址:https://www.cnblogs.com/DataArt/p/9975281.html
Copyright © 2020-2023  润新知