THP禁用方的几种方法
方法1:重启之后好像并没生效,可用以下方法:
针对这种情况,强烈建议开启大页:
首先禁用AMM
在 /etc/sysctl.conf 中配置 vm.nr_hugepages 计 算 需 要 使 用 的 hugepage 页 面 大 小
(nr_hugepages>=SGA_Target/Hugepagesize+10=90G*1024M/2M+10=46180)
对于RHEL6,需要关闭透明大页,关闭内核透明大页,需重启主机才可以生效
/etc/grub2.conf 在kernel行的后面加上"transparent_hugepage=never"
对于RHEL7,通过新的命令进行设置,需重启主机才可以生效
grubby --update-kernel=ALL --args="transparent_hugepage=never"
cat /boot/grub2/grub.cfg
nr_hugepages=SAG(MB)/Hugepagesize(MB)+100=46180
[root@zwrac1 ~]# ll /etc/sysconfig/grub
lrwxrwxrwx. 1 root root 15 12月 27 2020 /etc/sysconfig/grub -> ../default/grub
[root@ethanDB ~]# vi /etc/default/grub
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet transparent_hugepage=never"
运行下列命令使之修改生效:
[root@ethanDB ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
#3.重新生成 /boot/grub2/grub.cfg
sed -i 's/quiet/quiet transparent_hugepage=never numa=off/' /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg ##重启后检查是否生效
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /proc/cmdline
#4.检查当前的 transparent_hugepage 状态
cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
#5.检查当前的 transparent_hugepage 状态
grep AnonHugePages /proc/meminfo
AnonHugePages: 0 kB---------->>>返回值若是零,代表成功禁用 THP
如果结果非预期,可能是由于
Linux的ktune和tuned服务所导致。在此种情况下,建议关闭这两项服务:
systemctl status tuned
systemctl status ktune
systemctl stop tuned
systemctl disable tuned
systemctl status tuned
service tuned stop
chkconfig tuned off
service ktune status
chkconfig ktune off
或者:
tuned-adm off
---方法:
或:Add the following lines in /etc/rc.d/rc.local and reboot the server:
#授予执行权限
chmod +x /etc/rc.d/rc.local
[root@ethanDB ~]#vi /etc/rc.d/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
-----------------------------------------------------------
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
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
[root@ethanDB ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
查看是否关闭透明巨页
[root@ethanDB ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
如果输出结果为[always]表示透明巨页启用了。[never]表示透明巨页禁用;
[root@ethanDB ~]# grep -i HugePages /proc/meminfo
如果HugePages_Total,返回0,也意味着透明巨页禁用了
[root@ethanDB ~]# cat /proc/sys/vm/nr_hugepages
返回0也意味着透明巨页禁用了。
【结语】
1. 本文讲述了Oracle 禁Transparent HugePages的原因和方法;
2. 从RedHat 6,OEL 6,SLES 11和UEK2内核开始,系统缺省会启用 Transparent HugePages,用来提高内存管理的性能透明巨页(Transparent HugePages )和之前版本中的大页功能上类似。主要的区别是:Transparent HugePages 可以实时配置,不需要重启才能生效配置;
3. 透明HugePages类似于以前Linux版本中可用的HugePages。主要区别在于透明HugePages是在运行时由内核中的khugepaged线程动态设置,常规的HugePages必须在启动时预先分配。
4. 透明超大页面已知会导致意外的节点重新启动并导致RAC出现性能问题,因此Oracle强烈建议禁用透明超大页面。即使在单实例数据库环境中,也会出现意外的性能问题或延迟。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




