[20260622]centos 9为什么不使用配置hugepages.txt

[20260622]centos 9为什么不使用配置hugepages.txt

--//昨天安装数据库,检查发现启动的数据库没有使用hugepages,主要原因当设置use_large_pages=only时启动失败.
SQL> startup
ORA-27125: unable to create shared memory segment
Linux-x86_64 Error: 1: Operation not permitted
Additional information: 4948
Additional information: 10485760

--//修改use_large_pages=true,继续测试:
$ cat /u01/app/oracle/dbs/initbook.ora
SPFILE='/u01/app/oracle/dbs/spfilebook.ora'
use_large_pages=true

SQL> startup pfile=/u01/app/oracle/dbs/initbook.ora
ORACLE instance started.

Total System Global Area 1157625848 bytes
Fixed Size                  9684984 bytes
Variable Size             704643072 bytes
Database Buffers          436207616 bytes
Redo Buffers                7090176 bytes
Database mounted.
Database opened.

$ grep -i hugepage /proc/meminfo
AnonHugePages:     20480 kB
ShmemHugePages:        0 kB
FileHugePages:         0 kB
HugePages_Total:     600
HugePages_Free:      600
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
--//HugePages_Free=600,说明完全没有使用hugepages。

$ tail -f alert_book.log
...
Starting ORACLE instance (normal) (OS id: 1613410)
2026-06-22T16:37:18.846272+08:00
************************************************************
Instance SGA_TARGET = 1104 MB and SGA_MAX_SIZE = 1104 MB
************************************************************
2026-06-22T16:37:18.846594+08:00
****************************************************
 Sys-V shared memory will be used for creating SGA
 ****************************************************
2026-06-22T16:37:18.848134+08:00
**********************************************************************
2026-06-22T16:37:18.848231+08:00
Dump of system resources acquired for SHARED GLOBAL AREA (SGA)

2026-06-22T16:37:18.848381+08:00
 Domain name: user.slice/user-0.slice/session-1.scope
2026-06-22T16:37:18.848456+08:00
 Per process system memlock (soft) limit = 128G
2026-06-22T16:37:18.848529+08:00
 Expected per process system memlock (soft) limit to lock
 instance MAX SHARED GLOBAL AREA (SGA) into memory: 1106M
2026-06-22T16:37:18.848692+08:00
 Available system pagesizes:
  4K, 2048K
2026-06-22T16:37:18.848817+08:00
 Supported system pagesize(s):
2026-06-22T16:37:18.848939+08:00
  PAGESIZE  AVAILABLE_PAGES  EXPECTED_PAGES  ALLOCATED_PAGES  ERROR(s)
2026-06-22T16:37:18.849019+08:00
        4K       Configured               4           282628        NONE
2026-06-22T16:37:18.849139+08:00
     2048K              600             553                0        NONE
2026-06-22T16:37:18.849206+08:00
**********************************************************************
Using an SGA granule size of 16MB
--//设置hugepages大小完全满足需求,就是不使用,为什么?认真检查一遍相关设置没有发现异常。

--//检查the maximum size a process may lock into memory
$ ulimit -l
134217728

--//即使禁用transparent_hugepage,再次启动情况依旧.
$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]

--//在kimi的提醒下设置vm.hugetlb_shm_group等于oracle组id,问题解决.

# id -g oracle
54321

# grep vm.hugetlb_shm_group /etc/sysctl.d/98-oracle.conf
vm.hugetlb_shm_group=54321

# sysctl -p /etc/sysctl.d/98-oracle.conf
fs.file-max = 6815744
kernel.sem = 250 32000 250 128
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
kernel.panic_on_oops = 1
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
vm.nr_hugepages = 600
vm.nr_overcommit_hugepages = 50
vm.hugetlb_shm_group = 54321

# grep -i huge /proc/meminfo
AnonHugePages:     20480 kB
ShmemHugePages:        0 kB
FileHugePages:         0 kB
HugePages_Total:     600
HugePages_Free:       53
HugePages_Rsvd:        7
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:         1228800 kB

--//为什么出现这样的情况呢?kimi给出的解析如下:
为什么 CentOS 9 需要 vm.hugetlb_shm_group?

原因:内核安全策略收紧

从 RHEL 9 / CentOS Stream 9 开始,内核默认的 HugePages 权限控制更严格:

版本                            默认行为
RHEL 8 / CentOS 8 及之前        任何用户都可以使用 HugePages
RHEL 9 / CentOS 9               只有特定组的用户才能使用 HugePages

这是为了安全考虑,防止非授权进程占用 HugePages 内存。

posted @ 2026-06-30 21:49  lfree  阅读(5)  评论(0)    收藏  举报