Oracle 19c云环境必须永久禁用transparent_hugepage=always,否则因与use_large_pages=only冲突导致ORA-27102、CRS超时或节点驱逐;需修正grub配置引号问题,验证AnonHugePages=0 kB、HugePages_Total>0且HugePages_Rsvd>0,并确保pmon进程含hugetlb参数。
不是“建议”,是硬性前提。云环境(尤其vmware、kvm、oci或aws ec2)中,transparent_hugepage=always会与oracle的use_large_pages=only直接冲突,导致实例启动时反复fallback到4kb页,触发ora-27102: out of memory或静默失败——表现为crs超时、pmon异常退出、节点被驱逐,而非明确报错。
云虚拟化层本身已对内存做多次映射(guest物理→host物理→硬件物理),THP动态合并页会加剧页表层级和TLB miss。实测显示I/O延迟升高30%以上,cat /proc/meminfo | grep AnonHugePages非零时,
vmstat -s | grep "page"`常伴随高minor fault数;RAC节点间心跳超时频率上升,不是网络问题,而是TLB饱和后内存访问卡顿。</p><H3>/etc/default/grub修改常见翻车点(云镜像特有)</H3><p>云环境常用精简镜像,<code>/etc/default/grub中
GRUB_CMDLINE_LINUX行末尾常缺闭合双引号,例如:GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet transparent_hugepage=never
这会导致grub2-mkconfig报错“unexpected end of file”,后续reboot仍加载THP。必须检查:
transparent_hugepage=never紧贴在quiet后,中间无空格或乱码grub2-mkconfig -o /boot/grub2/grub.cfg后,grep transparent_hugepage /proc/cmdline应输出transparent_hugepage=never
cat /sys/kernel/mm/transparent_hugepage/enabled显示[never]只是内核模块状态,不等于生效。关键验证点:
grep AnonHugePages /proc/meminfo必须返回AnonHugePages: 0 kB
grep -i huge /proc/meminfo中HugePages_Total应为非零值(说明标准HugePages已预分配),且HugePages_Rsvd > 0(说明Oracle已成功绑定)ps -eo pid,comm,args | grep pmon,进程参数里应含hugetlb字样云环境中容易忽略的是:即使THP禁用,若vm.nr_hugepages没配够或memlock未设为unlimited,Oracle仍会退回到普通页——此时HugePages_Free接近HugePages_Total反而是失败信号。