操作系统关闭透明大页指南

引言
Oracle数据库是一个很吃内存的软件,生产环境安装数据库后需要开启大页来管理数据库内存的使用。同时需要关闭操作系统的透明大页,为什么要关闭透明大页呢?
由于透明大页已知会导致意外的节点重新启动并导致rac出现性能问题。因此oracle强烈建议禁用透明页。及时在单实例环境中透明大页也会导致性能问题,所以oracle 建议关闭操作系统上的透明大页。

现提供禁用方式,此次测试环境为redhat7.6,与其他版本略有不同,亲测有效
方法1
查看透明大页是否有值
[oracle@rhapp2 ~]$ cat /proc/meminfo |grep -i huge
AnonHugePages:      4096 kB
HugePages_Total:   184320
HugePages_Free:    184320
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
以上结果说明透明大页是开启状态

关闭透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
查看结果
[oracle@rhapp2 ~]$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
再看取值
[oracle@rhapp2 ~]$ cat /proc/meminfo |grep -i huge
AnonHugePages:      4096 kB
HugePages_Total:   184320
HugePages_Free:    184320
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
透明大页依旧有值,关闭失败,不可取。


方法2:亲测有效
[root@rhapp2 ~]# cat /proc/meminfo |grep -i huge
AnonHugePages:      4096 kB
HugePages_Total:   184320
HugePages_Free:    184320
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
透明大页未关闭
[root@rhapp2 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
并且从方法一取值是never的
[root@rhapp2 ~]#
开始关闭操作
[root@rhapp2 ~]# cd /etc/default
[root@rhapp2 default]# cp grub grub_bak_0329
[root@rhapp2 default]# vi grub
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="crashkernel=auto rd.lvm.lv=rootvg/root rd.lvm.lv=rootvg/usr rhgb quiet transparent_hugepage=never"
GRUB_DISABLE_RECOVERY="true"
标红部分为新加字段
[root@rhapp2 default]#
[root@rhapp2 default]# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg_bak0329
配置生效
[root@rhapp2 default]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-957.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-957.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-3bb9aad0409c4a96a6297b2aa54f84a5
Found initrd image: /boot/initramfs-0-rescue-3bb9aad0409c4a96a6297b2aa54f84a5.img
done
[root@rhapp2 default]#
[root@rhapp2 default]# cat /proc/meminfo |grep -i huge
AnonHugePages:      4096 kB
HugePages_Total:   184320
HugePages_Free:    184320
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
以上发现透明大页有值,需要重启生效
[root@rhapp2 default]#
[root@rhapp2 default]# reboot

Session terminated, killing shell... ...killed.

再次查看透明大页也被关闭
[root@rhapp2 ~]# cat /proc/meminfo |grep -i huge
AnonHugePages:         0 kB
HugePages_Total:   184320
HugePages_Free:    183554
HugePages_Rsvd:       19
HugePages_Surp:        0
Hugepagesize:       2048 kB
方法可行

方法3:修改/etc/default/grub,方法2的加强版(Linux7/8推荐使用)
透明大页查看
[root@enmo1 ~]# cat /proc/meminfo |grep -i huge
AnonHugePages:      2048 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

接下来修改、生效、重启三部曲,简单快速
[root@enmo1 ~]# cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-3.10.0-957.el7.x86_64 root=/dev/mapper/rootvg-root ro crashkernel=auto rd.lvm.lv=rootvg/root rd.lvm.lv=rootvg/swap rd.lvm.lv=rootvg/usr rhgb quiet LANG=en_AU.UTF-8
[root@enmo1 ~]# cat /etc/default/grub
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="crashkernel=auto rd.lvm.lv=rootvg/root rd.lvm.lv=rootvg/swap rd.lvm.lv=rootvg/usr rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
[root@enmo1 ~]#

修改
[root@enmo1 ~]# sed -i 's/quiet/quiet transparent_hugepage=never/' /etc/default/grub
[root@enmo1 ~]# cat /etc/default/grub
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="crashkernel=auto rd.lvm.lv=rootvg/root rd.lvm.lv=rootvg/swap rd.lvm.lv=rootvg/usr rhgb quiet transparent_hugepage=never"
GRUB_DISABLE_RECOVERY="true"

生效
[root@enmo1 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-957.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-957.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-7482022d97e242dbbe5d7b753f1222f6
Found initrd image: /boot/initramfs-0-rescue-7482022d97e242dbbe5d7b753f1222f6.img
Done

重启操作系统
reboot.....

以下两条命令都能验证
[oracle@enmo1 ~]$ cat /proc/meminfo |grep -i huge
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

[oracle@enmo1 ~]$ cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-3.10.0-957.el7.x86_64 root=/dev/mapper/rootvg-root ro crashkernel=auto rd.lvm.lv=rootvg/root rd.lvm.lv=rootvg/swap rd.lvm.lv=rootvg/usr rhgb quiet transparent_hugepage=never
[oracle@enmo1 ~]$

方法4:通过修改rc.lcoal(linux6 建议使用)
关闭透明大页:

cat >>/etc/rc.d/rc.local <<EOF
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
EOF

关闭 numa:

sed -i 's/quiet/quiet numa=off/' /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg

suse操作系统略有不同
# 重启后失效
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
 
# 开机时设置never到以上文件中
echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/init.d/boot.local
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/init.d/boot.local
 
chmod +x /etc/init.d/boot.local
综上所述:
Linux6 建议使用方法4,linux7/8建议使用方法3。透明大页是否关闭验证有很多方法。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值