欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Oracle Rac关闭透明大页的方法

程序员文章站 2024-01-26 11:03:46
在移动进行数据库进行规范检查的时候有这么一项 ,要求系统关闭透明大页 。 为什么要关闭透明大页? 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 ) 也会导致一些异常的性能问题;