关闭Linux内存透明大页Transparent HugePages,THP

Author Avatar
Song
发表:2024-09-14 16:40:00
修改:2024-09-14 16:43:31

在CentOS 7中,关闭透明大页(Transparent HugePages,THP)通常是通过修改内核参数或配置文件来完成的。透明大页有时会对数据库性能(例如Oracle)产生负面影响,因此关闭它可能是必要的。以下是关闭透明大页的几种方法:

1. 临时关闭(无需重启)

使用以下命令临时关闭透明大页,但重启后会恢复默认设置。

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

可以通过以下命令验证是否已关闭:

cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag

输出应显示类似于 [never] always madvise,表示已成功关闭。

2. 永久关闭(重启后仍然有效)

为了永久关闭透明大页,可以通过以下步骤:

2.1 修改grub配置文件

编辑/etc/default/grub文件,添加transparent_hugepage=never到GRUB命令行参数:

vi /etc/default/grub

找到以下行:GRUB_CMDLINE_LINUX="..."

修改为:
	GRUB_CMDLINE_LINUX="... transparent_hugepage=never"

2.2 更新GRUB配置:

  • 对于BIOS系统:

grub2-mkconfig -o /boot/grub2/grub.cfg
  • 对于UEFI系统

grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

2.3 重启系统:

reboot

2.4 重启后再次检查:

cat /sys/kernel/mm/transparent_hugepage/enabled

3. 通过rc.local永久关闭

如果不想修改GRUB,可以通过rc.local脚本在每次启动时自动关闭透明大页:

  1. 编辑/etc/rc.d/rc.local文件,添加以下行:

    echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag
  2. 确保rc.local脚本有可执行权限:

    chmod +x /etc/rc.d/rc.local
  3. 重启系统后,rc.local会自动执行关闭透明大页的命令。

4. 验证透明大页是否已关闭

使用以下命令检查透明大页状态:

cat /sys/kernel/mm/transparent_hugepage/enabled cat /sys/kernel/mm/transparent_hugepage/defrag
如果显示 [never] always madvise,表示已成功关闭。

grep AnonHugePages /proc/meminfo
AnonHugePages:         0 kB---------->>>返回值若是零代表关闭

如果按照这些步骤后依然无法关闭透明大页,可以检查系统是否有其他服务(如tunedkernel)在干扰透明大页的设置。

评论