[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 内存。
--//昨天安装数据库,检查发现启动的数据库没有使用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 内存。
浙公网安备 33010602011771号