必须禁用透明大页(THP),否则 Oracle 11g RAC 极大概率触发节点异常重启或 I/O 延迟飙升;确认是否真正禁用需同时检查:grep -i huge /proc/meminfo 中 AnonHugePages 值为 0,且 /proc/cmdline 包含 transparent_hugepage=never。

必须禁用透明大页(THP),否则 Oracle 11g RAC 极大概率触发节点异常重启或 I/O 延迟飙升——这不是调优选项,是上线前强制动作。
怎么确认 THP 实际是否启用
别只看 /sys/kernel/mm/transparent_hugepage/enabled 文件内容,它可能显示 [never] 但 THP 仍在工作。关键看两个硬指标:
- 运行
grep -i huge /proc/meminfo,若AnonHugePages值 > 0(例如AnonHugePages: 690176 kB),说明 THP 正在动态分配内存,已启用 - 检查路径是否存在:
ls /sys/kernel/mm/transparent_hugepage/;若目录存在,且内核不是 UEK2+(该版本已移除该路径),就必须处理 - RHEL6 旧系统可能用的是
/sys/kernel/mm/redhat_transparent_hugepage/,需一并检查
为什么 echo never > /sys/... 只能临时验证
直接写 /sys/kernel/mm/transparent_hugepage/enabled 或 /sys/kernel/mm/transparent_hugepage/defrag 只影响当前会话,重启即失效。更危险的是:RHEL 7.6 等内核中,khugepaged 进程会在系统启动后自动重开 THP,导致你看到 [never] 却发现 AnonHugePages 持续增长。
-
/etc/rc.local里加echo命令无效:RHEL7+ 默认不执行rc.local,且执行时机晚于khugepaged启动 - 临时命令仅用于验证:可先执行
echo never > /sys/kernel/mm/transparent_hugepage/enabled和echo never > /sys/kernel/mm/transparent_hugepage/defrag,再查AnonHugePages是否归零
永久禁用 THP 的唯一可靠方式
修改 GRUB 内核参数,这是 Oracle MOS Doc ID 1557478.1 明确指定的「首选方法」,适用于 RHEL6/7、Oracle Linux 6/7、SLES11+:
- 编辑
/etc/default/grub,在GRUB_CMDLINE_LINUX行末尾追加transparent_hugepage=never,例如:GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet transparent_hugepage=never" - 重新生成 GRUB 配置:
• RHEL7+/CentOS7+:运行grub2-mkconfig -o /boot/grub2/grub.cfg
• RHEL6/CentOS6:编辑/etc/grub.conf,在 kernel 行末尾加transparent_hugepage=never - 重启服务器后,再次运行
grep AnonHugePages /proc/meminfo,确认值为0
真正容易被忽略的点是:即使你改了 GRUB 参数,也得确认新内核启动项生效了——检查 cat /proc/cmdline 输出里是否含 transparent_hugepage=never;没出现就说明配置没加载成功,数据库仍暴露在风险中。


















