暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

禁用透明大页

原创 逆风飞翔 2022-02-24
1821

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论