关闭 THP 可避免 数据库 和高性能计算场景下的性能下降,通过检查 /sys/kernel/mm/transparent_hugepage/enabled 状态,临时使用echo never 写入 enabled 和 defrag 文件,永久关闭需在 GRUB 配置中添加 transparent_hugepage=never 并更新引导。

在 Linux 系统中,透明大页(Transparent Huge Pages, THP)虽然能提升某些工作负载的内存访问效率,但在数据库、高性能计算等场景下反而可能引起性能下降。关闭 THP 是常见的性能调优手段之一。以下是关闭 THP 的具体方法和注意事项。
什么是透明大页(THP)
Linux 内核通过 THP 自动将多个 4KB 小页面合并为 2MB 的大页面,减少 TLB(Translation Lookaside Buffer)缺失,从而提升内存密集型应用的性能。但 THP 的后台合并机制可能导致延迟波动,尤其对响应时间敏感的应用不利。
检查当前 THP 状态
可通过以下命令查看 THP 是否启用:
echo $(cat /sys/kernel/mm/transparent_hugepage/enabled)
输出通常为类似 [always] madvise never 的格式:
- always:始终启用 THP
- madvise:仅对调用 madvise()的应用启用
- never:禁用 THP
若显示 always 或 madvise,建议根据应用场景决定是否关闭。
临时关闭 THP(重启失效)
执行以下命令可立即关闭 THP:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
这两步分别禁用 THP 分配和内存碎片整理功能,避免后台任务影响性能。
永久关闭 THP
要使设置在重启后仍生效,需修改启动配置:
- 对于使用 GRUB 的系统,在 /etc/default/grub 中修改 GRUB_CMDLINE_LINUX 行:
GRUB_CMDLINE_LINUX=”… transparent_hugepage=never”
- 保存后更新 GRUB 配置:
grub2-mkconfig -o /boot/grub2/grub.cfg # x86_64 系统
# 或
update-grub # Debian/Ubuntu 系统
- 重启系统后验证 THP 状态是否为“never”
针对特定应用启用 THP(可选)
若只希望某些应用使用大页,可保留全局 THP 为“never”,并在程序中显式调用 madvise()并设置 MADV_HUGEPAGE。这种方式更可控,适合数据库如 MongoDB、MySQL 等。
基本上就这些。关闭 THP 不复杂但容易忽略,尤其在部署数据库或低延迟服务时,务必检查此项设置,避免潜在性能问题。