跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

如何在Linux中修改内核的透明大页设置 Linux禁用THP优化内存的方法

数据库类服务在Linux上必须禁用THP,仅改enabled无效;需同步关闭defrag并设置内核参数transparent_hugepage=never,且数据库进程须重启验证。 数据库类服务在Linux上必须禁用THP,只改
/sys/kernel/mm/transparent_hugepage/enabled
是无效的——
defrag
和内核启动参数必须同步关闭,否则
khugepaged
线程仍会后台扫描并触发内存抖动。 确认THP当前是否真正启用 别只看
enabled
,两个文件都要查:
cat /sys/kernel/mm/transparent_hugepage/enabled
输出含
[always]
表示启用;
[never]
才是禁用
cat /sys/kernel/mm/transparent_hugepage/defrag
同样必须是
[never]
,否则
khugepaged
照常运行 常见误判:输出为
always [madvise] never
—— 这仍是启用状态,方括号标出的才是当前生效项 永久禁用THP的可靠写法(非rc.local)
rc.local
在systemd系统中不可靠,尤其RAC或容器环境易失效。推荐直接改内核参数: Docker Desktop(linux) 当前 Docker 最新稳定版本之一,主要针对稳定性和兼容性进行了修复优化,适合生产环境与日常开发使用。该版本继续强化 AI 开发支持、容器日志管理以及 Docker Engine 的安全能力,对 Windows/macOS/Linux 平台兼容性进行了进一步优化。 下载 编辑
/etc/default/grub
,在
GRUB_CMDLINE_LINUX
末尾追加:
transparent_hugepage=never
执行
grub2-mkconfig -o /boot/grub2/grub.cfg
(BIOS)或
/boot/efi/EFI/redhat/grub.cfg
(UEFI) 重启生效。该方式优先级最高,覆盖所有运行时设置 注意:某些旧版CentOS路径为
/sys/kernel/mm/redhat_transparent_hugepage/
,先
ls /sys/kernel/mm/*huge*
确认路径 验证THP是否退出数据库进程空间 改完配置不等于进程已脱离THP影响,尤其Oracle RAC、MySQL等需显式重启: 查进程页使用:
grep -i "anonhugepages\|thp" /proc/$(pgrep -f "mysqld")/smaps | grep -E "(AnonHugePages|MMU)"
——
AnonHugePages:
值应长期为
0
Oracle RAC必须重启整个CRS栈:
crsctl stop crs && crsctl start crs
,仅重启DB实例无效 MongoDB ≤7.0 日志若出现
"WARNING: Detected transparent hugepage support"
,说明未真正禁用
perf stat -e major-faults,minor-faults -p $(pgrep -f "postgres")
对比前后,
major-faults
应明显下降 最容易被忽略的是
defrag
开关和进程重启动作——很多故障现场查出来
enabled
已设
never
,但
defrag
仍是
[always]
,或者Oracle的
ocssd.bin
从开机就没重读过内存策略。

相关文章