Oracle Rac关闭透明大页的方法
在移动进行数据库进行规范检查的时候有这么一项 ,要求系统关闭透明大页 。 为什么要关闭透明大页?
Oracle RAC关闭透明大页
透明巨大页面的一些官方介绍资料:
透明超大页面(THP)在RHEL 6中默认情况下对所有应用程序都是启用的。内核试图尽可能分配巨大的页面,如果mmap区域自然对齐2MB,任何Linux进程都会收到2MB页面。主内核地址空间本身被映射为巨大的页面,减少了内核代码的TLB压力。关于Hugepages的一般信息,请参阅:什么是巨大页面以及使用它们的优点?
内核将始终尝试使用巨页来满足内存分配。如果没有可用的巨大页面(例如由于物理连续内存不可用),内核将回退到正常的4KB页面。THP也是可交换的(不像hugetlbfs)。这是通过将大页面分成更小的4KB页面来实现的,然后这些页面被正常地换出。
但为了有效地使用巨大的页面,内核必须找到足够大的物理连续区域以满足请求,并且也要正确对齐。为此,已经添加了一个khugepaged内核线程。此线程偶尔会尝试替换当前正在使用的较小页面,并分配一个大页面,从而最大限度地提高THP的使用率。
在userland中,不需要修改应用程序(因此是透明的)。但有一些方法可以优化它的使用。对于想要使用巨大页面的应用程序,使用posix_memalign()还可以帮助确保大型分配与大页面(2MB)边界对齐。
此外,THP仅针对匿名内存区域启用。有计划添加对tmpfs和页面缓存的支持。THP可调参数位于/ sys / kernel / mm / redhat_transparent_hugepage下的/ sys树中。
查看是否启用透明大页
1:命令cat /sys/kernel/mm/redhat_transparent_hugepage/enabled 该命令适用于Red Hat Enterprise Linux系统
[root@getlnx06 ~]# more /etc/issue
Red Hat Enterprise Linux Server release 6.6 (Santiago)
Kernel \r on an \m
[root@getlnx06 ~]# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
[always] madvise never
2:命令cat /sys/kernel/mm/transparent_hugepage/enabled 该命令适用于其它Linux系统
[root@getlnx06 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
[root@getlnx06 ~]#
使用命令查看时,如果输出结果为[always]表示透明大页启用了。[never]表示透明大页禁用、[madvise]表示
3:如果HugePages_Total返回0,也意味着透明大页禁用了
[root@getlnx06 ~]# grep -i HugePages_Total /proc/meminfo
4:cat /proc/sys/vm/nr_hugepages返回0也意味着透明大页禁用了。
[root@getlnx06 ~]# cat /proc/sys/vm/nr_hugepages
0
禁用、启用透明大页功能
方法1:设置/etc/grub.conf文件,在系统启动是禁用。
[root@getlnx06 ~]# vi /etc/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/mapper/VolGroup--LogVol0-LogVol01
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux 6 (2.6.32-504.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=/dev/mapper/VolGroup--LogVol0-LogVol01 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup-LogVol0/LogVol01 rd_LVM_LV=VolGroup-LogVol0/LogVol00 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-504.el6.x86_64.img
transparent_hugepage=never
HugePages_Total: 0
方法2:设置/etc/rc.local文件
[root@getlnx06 ~]# vi /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
if test -f /sys/kernel/mm/redhat_transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
fi
使用上面的配置后必须重启操作系统才能生效,你也可以运行下面命令不用重启操作系统
[root@getlnx06 ~]# echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
[root@getlnx06 ~]# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
always madvise [never]
小知识点:
1:从RedHat 6, OEL 6, SLES 11 and UEK2 kernels 开始,系统缺省会启用 Transparent HugePages :用来提高内存管理的性能透明大页(Transparent HugePages )和之前版本中的大页功能上类似。主要的区别是:Transparent HugePages 可以实时配置,不需要重启才能生效配置;
2:Transparent Huge Pages在32位的RHEL 6中是不支持的。
Transparent Huge Pages are not available on the 32-bit version of RHEL 6.
默认情况下,Red Hat Enterprise Linux 6,SUSE Linux Enterprise Server 11和Oracle Linux 6与早期版本的Oracle Linux Unbreakable Enterprise Kernel 2(UEK2)内核一起启用透明HugePages内存。在Oracle Linux UEK2内核的更高版本中禁用透明HugePages内存.Transparent HugePages可能导致运行时内存分配延迟。为避免性能问题,Oracle建议您在所有Oracle数据库服务器上禁用透明超大页面。Oracle建议您使用标准的HugePages来提高性能.Transparent HugePages内存与标准HugePages内存不同,因为内核khugepaged线程在运行时动态分配内存。标准HugePages内存在启动时预先分配,并且在运行时不会更改。
从RedHat 6,OEL 6,SLES 11和UEK2内核开始,实现并启用了透明超大页面(默认)以尝试改进内存管理。透明HugePages类似于以前Linux版本中可用的HugePages。主要区别在于透明HugePages是在运行时由内核中的khugepaged线程动态设置的,而常规的HugePages必须在启动时预先分配。由于透明超大页面已知会导致意外的节点重新启动并导致RAC出现性能问题,因此Oracle强烈建议禁用透明超大页面。另外,即使在单实例数据库环境中,透明超大页面也可能会导致问题,并出现意外的性能问题或延迟。
4:安装Vertica Analytic Database时也必须关闭透明大页功能。
3: ORACLE官方不建议我们使用RedHat 6, OEL 6, SLES 11 and UEK2 kernels 时的开启透明大页(Transparent HugePages ), 因为透明大页(Transparent HugePages ) 存在一些问题:
1.在RAC环境下 透明大页(Transparent HugePages )会导致异常节点重启,和性能问题;
2.在单机环境中,透明大页(Transparent HugePages ) 也会导致一些异常的性能问题;
推荐阅读