开启THP精髓是提高内存分配效率,减少CPU SYS开销。

1、首先检查THP的启用状态:

[root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
[root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

如果输出结果为[always]表示透明大页启用了。[never]表示透明大页禁用、[madvise]表示(只在MADV_HUGEPAGE标志的VMA中使用THP
这个状态就说明都是启用的。

2、在运行时禁用THP(Transparent HugePages)
运行以下命令即时禁用THP,该命令适用于其它Linux系统:

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

3、永久禁用THP(Transparent HugePages )
编辑rc.local文件:

[root@localhost ~]# vim /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

4、保存退出,然后赋予rc.local文件执行权限:

[root@localhost ~]# chmod +x /etc/rc.d/rc.local 

5、最后重启系统,以后再检查THP应该就是被禁用了

[root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
[root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/defrag 
always madvise [never]

6、另一种方式查看是否被禁用看是否为0

cat /proc/sys/vm/nr_hugepages
sysctl vm.nr_hugepages

查看使用的内存

cat /proc/meminfo && grep AnonHugePages /proc/meminfo 

确认是否降下来
官方参考1
tidb参考2

对于数据库应用,不推荐使用 THP.主要的原因是这类数据库大部分访问内存的方式是分散的,并不是访问连续的页面,而这样的访问模式,
就会造成内存的碎片化.访问的page 不也不是大量连续性的. 并且在不启用THP 时申请4KB的内存时,
LINUX会分配相应的内存给应用, 但如果是在系统级别启用了THP,则类似数据库申请内存时,即使申请的值是4KB ,
但分配是会以大于4KB例如 2MB 来进行分配,这样数据库申请使用内存的方式也会出现问题,和相关的损耗.

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐