没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
一、关闭Linux透明大页
1. 介绍
从RedHat6, RedHat7, OL6, OL7 SLES11 and UEK2 kernels开始,透明大页默认是被开启的以便去改善操作系统的内存管理。透明大页与之前版本的传统意义上的HugePages是类似的,最主要的区别在于透明大页
是可以在操作系统运行过程中动态设置的然而传统的hugepages是需要重启操作系统才能生效。
RAC环境下透明大页可能会造成不可预知的节点重启和各种性能问题,另外在单实例的环境下透明大页也会造成不可预知的性能问题。所以oracle强烈建议在所有运行oracle数据库的服务器上关闭透明大页。
2.实验环境:Redhat 6.8 + Oracle 11.2.0.4 RAC
首先检查当前操作系统是否启用透明大页,执行如下两条命令:
1).grep HugePage /proc/meminfo
2).cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
3.确认透明大页是否开启
[root@myrac1 ~]# grep HugePage /proc/meminfo
AnonHugePages: 264192 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
#若上面的AnonHugePages > 0, 说明启用了透明大页
[root@myrac1 ~]# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
[always] madvise never
#若上面扩号是在never的位置,说明禁用了透明大页
官方文档中给出了两种关闭透明大页的方法,但实际测试过程中第二种方法未能关闭透明大页,因此本文只给出一种有效可行的关闭透明大页的方法。如下:
编辑/etc/grub.conf配置文件,在kernel行添加transparent_hugepage=never参数
注:添加transparent_hugepage=never参数时,一定要加到kernel一行中,否则配置不生效。
[root@myrac1 ~]# 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/vg_rhel6-lv_root
# 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-642.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/mapper/vg_rhel6 -lv_root transparent_hugepage=never rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16
rd_LVM_LV=vg_rhel6/lv_swap crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_LVM_LV=vg_rhel6/lv_root rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-642.el6.x86_64.img
~
重启操作系统后查看透明大页是否禁用,如下:
[root@myrac1 ~]# grep HugePage /proc/meminfo
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
[root@myrac1 ~]# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
always madvise [never]
4.关闭透明大页
二、开启Linux大页(针对Oracle RAC及Oracle DB服务器)
1. 介绍
(1).
减少页表(Page Table)大小。每一个Huge Page,对应的是连续的2MB物理内存,这样12GB的物理内存只需要48KB的Page Table。
(2).
Huge Page内存只能锁定在物理内存中,不能被交换到交换区。这样避免了交换引起的性能影响。
(3).
由于页表数量的减少,使得CPU中的TLB(可理解为CPU对页表的CACHE)的命中率大大提高。
(4).
针对Huge Page的页表,在各进程之间可以共享,也降低了Page Table的大小。
使用大内存页有哪些好处:
2.实验环境:Redhat 6.8 + Oracle 11.2.0.4 RAC
3.1
确操作系统是否支持大页
[root@myrac1 ~]# grep HugePages /proc/meminfo
AnonHugePages: 0 kB
HugePages_Total:
0
HugePages_Free:
0
HugePages_Rsvd: 0
HugePages_Surp: 0
[root@myrac1 ~]# grep Hugepagesize /proc/meminfo
Hugepagesize: 2048 kB
HugePages
_
Total表示系统中配置的大内存页页面数。HugePages_Free表示没有访问过的大内存页面数,这里free容易引起误解,这在稍后有所解释。HugePages_Rsvd表示已经分配但是还未使用的页面
数。Hugepagesize表示大内存页面大小,这里为2MB,注意在有的内核配置中可能为4MB。
HugePages
_
Free的解释如下:
比如HugePages总计11GB,SGA_MAX_SIZE为10GB,SGA_TARGET为8GB。那么数据库启动后,会根据SGA_MAX_SIZE分配HugePage内存,这里为10GB,真正Free的HugePage内存为11 -10=1G。但是SGA_TARGET只有
8GB,那么会有2GB不会被访问到,则HugePage_Free为2+1=3GB,HugePage_Rsvd内存有2GB。这里实际上可以给其他实例使用的只有1GB,也就是真正意义上的Free只有1GB。
3.2
计划要设置的内存页数量
到目前为止,大内存页只能用于共享内存段等少量类型 的内存。一旦将物理内存用作大内存页,那么这些物理内存就不能用作其他用途,比如作为进程的私有内存。因此不能将过多的内存设置为大内
存页。我们通常将大内存页用作Oracle数据库的SGA,那么大内存页数量:
HugePages_Total=ceil(SGA_MAX_SIZE/Hugepagesize)+N
比如,为数据库设置的SGA_MAX_SIZE为18GB,那么页面数可以为ceil(18*1024/2)+2=9218。这里加上N,是需要将HugePage内存空间设置得比SGA_MAX_SIZE稍大,通常为1 -2即可。我们通过ipcs -m命令查看
共享内存段的大小,可以看到共享内存段的大小实际上比SGA_MAX_SIZE约大。如果服务器上有多个Oracle实例,需要为每个实例考虑共享内存段多出的部分,即N值会越大。另外,Oracle数据库要么全部使
用大内存页,要么完全不使用大内存页,因此不合适的HugePages_Total将造成内存的浪费。
实验环境中
:
SQL> show parameter sga
NAME TYPE VALUE
3.开启Linux大页
关闭Linux透明大页和开启大页的方法
2020年5月8日
9:46
分区
Linux
的第
1
页
资源评论
Junsong
- 粉丝: 2
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功