[20260421]11g关于hugepages的相关问题.txt

[20260421]11g关于hugepages的相关问题.txt

--//昨天测试21c设置use_large_pages时遇到的问题,遇到以前在11g测试不同的情况,在11g重复测试验证看看。
--//测试1.设置use_large_pages=auto,是否启动oaadism命令。
--//测试2.设置use_large_pages=only时,vm.nr_overcommit_hugepages是否有效。
--//测试3,无论设置use_large_pages任何值,是否都会执行oradism。

1.环境:
SYS@book> @ ver2
==============================
PORT_STRING                   : x86_64/Linux 2.4.xx
VERSION                       : 11.2.0.4.0
BANNER                        : Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL procedure successfully completed.

# grep -i ^vm /etc/sysctl.d/98-oracle.conf
vm.nr_hugepages = 385
vm.nr_overcommit_hugepages = 50

# grep -i hugepage /proc/meminfo
AnonHugePages:     16384 kB
HugePages_Total:     385
HugePages_Free:      118
HugePages_Rsvd:      118
HugePages_Surp:        0
Hugepagesize:       2048 kB
--//当前实例使用hugepages数量 HugePages_Total-HugePages_Free+HugePages_Rsvd = 385.

SYS@book> @ pvalid use_large_pages
Display valid values for multioption parameters matching "use_large_pages"...
  PAR# PARAMETER        ORD VALUE   DEFAULT
------ ---------------- --- ------- -------
   117 use_large_pages    1 TRUE    DEFAULT
       use_large_pages    2 AUTO
       use_large_pages    3 ONLY
       use_large_pages    4 FALSE
--//11g仅仅支持4种设置,不支持auto_only设置。

SYS@book> @ hidez use_large_pages
SYS@book> @ pr
==============================
NUM                           : 117
N_HEX                         :    75
NAME                          : use_large_pages
DESCRIPTION                   : Use large pages if available (TRUE/FALSE/ONLY)
DEFAULT_VALUE                 : FALSE
SESSION_VALUE                 : ONLY
SYSTEM_VALUE                  : ONLY
ISSES_MODIFIABLE              : FALSE
ISSYS_MODIFIABLE              : FALSE
PL/SQL procedure successfully completed.
--//当前use_large_pages=only。

2.测试1:
--//设置use_large_pages=auto,是否启动oaadism命令。
SYS@book> alter system set use_large_pages=auto scope=spfile ;
System altered.

SYS@book> shutdown immediate ;
Database closed.
Database dismounted.
ORACLE instance shut down.

--//修改/etc/sysctl.d/98-oracle.conf,vm.nr_hugepages = 350,vm.nr_overcommit_hugepages = 50。
--//在关闭数据库的情况执行sysctl -p  /etc/sysctl.d/98-oracle.conf.
# grep -i ^vm /etc/sysctl.d/98-oracle.conf
vm.nr_hugepages = 350
vm.nr_overcommit_hugepages = 50

# sysctl -p  /etc/sysctl.d/98-oracle.conf
....

SYS@book> startup nomount
ORACLE instance started.

Total System Global Area  801701888 bytes
Fixed Size                  2257520 bytes
Variable Size             285216144 bytes
Database Buffers          507510784 bytes
Redo Buffers                6717440 bytes
--//可以启动数据库。

--//查看alert日志:
Tue Apr 21 09:15:19 2026
Adjusting the default value of parameter parallel_max_servers
from 160 to 150 due to the value of parameter processes (180)
Starting ORACLE instance (normal)
DISM started, OS id=3422
~~~~~~~~~~~~~~~~~~~~~~~~~
************************ Large Pages Information *******************
Parameter use_large_pages = AUTO
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Per process system memlock (soft) limit = 128 GB

Total Shared Global Region in Large Pages = 770 MB (100%)

Large Pages used by this instance: 385 (770 MB)
Large Pages unused system wide = 0 (0 KB)
Large Pages configured system wide = 385 (770 MB)
Large Page size = 2048 KB
Time taken to allocate Large Pages = 0.002841 sec
********************************************************************
--//注意看下划线,启动dism。

$ ps -fp 3422
UID        PID  PPID  C STIME TTY          TIME CMD
root      3422     1  0 09:15 ?        00:00:00 ora_dism_book

# grep -i hugepage /proc/meminfo
AnonHugePages:     20480 kB
HugePages_Total:     385
HugePages_Free:      161
HugePages_Rsvd:      161
HugePages_Surp:        0
Hugepagesize:       2048 kB

# sysctl vm.nr_hugepages
vm.nr_hugepages = 385
--//修改内核参数满足启动需求。

# ipcs -m
------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status
0x00000000 294912     oracle     640        12582912   18
0x00000000 327681     oracle     640        792723456  18
0x56c108b0 360450     oracle     640        2097152    18

# ipcs -mu

------ Shared Memory Status --------
segments allocated 3
pages allocated 197120
pages resident  114688
pages swapped   0
Swap performance: 0 attempts     0 successes

--//12582912/2/1024/1024  = 6
--//792723456 /2/1024/1024   = 378
--//2097152 /2/1024/1024   = 1
--//6+378+1 = 385,正好满足启动需求。

# ps -fp 3422 -l
F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root      3422     1  0  80   0 - 200696 pipe_w 09:15 ?       00:00:00 ora_dism_book

# ps -p 3422 -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0  3422     1  0  80   0 - 200696 pipe_w ?       00:00:00 oradism
--//昏,仔细看笔记,如果这样执行ps -p 3422 -l看到cmd显示的是oradism,而不是ora_dism_book。
--//也就是后台执行的是oradism。

$ ll -i $(which oradism)
20511540 -rwsr-x---. 1 root oinstall 71790 2013-08-24 10:51:02 /u01/app/oracle/product/11.2.0.4/db_1/bin/oradism
--//注意看owner,以及文件权限-rwsr-x---。

# lsof  -p  3422
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
oradism 3422 root  cwd    DIR   8,17      115 33943558 /u01/app/oracle/product/11.2.0.4/db_1/dbs
oradism 3422 root  rtd    DIR    8,3      235       64 /
oradism 3422 root  txt    REG   8,17    71790 20511540 /u01/app/oracle/product/11.2.0.4/db_1/bin/oradism
oradism 3422 root  DEL    REG   0,12            294912 /SYSV00000000
oradism 3422 root  DEL    REG   0,12            327681 /SYSV00000000
oradism 3422 root  DEL    REG   0,12            360450 /SYSV56c108b0
oradism 3422 root  mem    REG    8,3  2116736   145558 /usr/lib64/libc-2.17.so
oradism 3422 root  mem    REG    8,3   113152   145568 /usr/lib64/libnsl-2.17.so
oradism 3422 root  mem    REG    8,3   143352   145584 /usr/lib64/libpthread-2.17.so
oradism 3422 root  mem    REG    8,3  1141456   145566 /usr/lib64/libm-2.17.so
oradism 3422 root  mem    REG    8,3    19344   145564 /usr/lib64/libdl-2.17.so
oradism 3422 root  mem    REG    8,3   155064   145551 /usr/lib64/ld-2.17.so
oradism 3422 root    0r  FIFO    0,8      0t0    24015 pipe
oradism 3422 root    1w  FIFO    0,8      0t0    24016 pipe
oradism 3422 root    2r   CHR    1,3      0t0     1028 /dev/null
oradism 3422 root    3r   CHR    1,3      0t0     1028 /dev/null

# lsof /u01/app/oracle/product/11.2.0.4/db_1/bin/oradism
COMMAND  PID USER  FD   TYPE DEVICE SIZE/OFF     NODE NAME
oradism 3422 root txt    REG   8,17    71790 20511540 /u01/app/oracle/product/11.2.0.4/db_1/bin/oradism
--//看来21c我的分析有问题,不过21c视乎每次启动oracle实例,不管use_large_pages如果设置,都会调用oradism。
--//但是21c下仅仅auto,auto_only,only才会在实例启动后,如果vm.nr_hugepages不足,后台运行的oradism保留在后台运行。

SYS@book> shutdown immediate ;
ORA-01507: database not mounted
ORACLE instance shut down.

# sysctl vm.nr_hugepages
vm.nr_hugepages = 385

# grep -i hugepage /proc/meminfo
AnonHugePages:     10240 kB
HugePages_Total:     385
HugePages_Free:      385
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
--//可以发现关闭数据库不会修改回来内核参数vm.nr_hugepages = 350。

3.测试2:
--//设置use_large_pages=only时,vm.nr_overcommit_hugepages是否有效。

SYS@book> alter system set use_large_pages=only scope=spfile ;
System altered.

SYS@book> shutdown immediate ;
ORA-01507: database not mounted
ORACLE instance shut down.

# grep -i ^vm /etc/sysctl.d/98-oracle.conf
vm.nr_hugepages = 350
vm.nr_overcommit_hugepages = 50

# sysctl -p  /etc/sysctl.d/98-oracle.conf
...

# sysctl vm.nr_hugepages
vm.nr_hugepages = 350

SYS@book> startup nomount
ORACLE instance started.
Total System Global Area  801701888 bytes
Fixed Size                  2257520 bytes
Variable Size             285216144 bytes
Database Buffers          507510784 bytes
Redo Buffers                6717440 bytes
--//如果看21下的测试,这类情况无法启动实例。

--//alert日志如下:
Starting ORACLE instance (normal)
************************ Large Pages Information *******************
Parameter use_large_pages = ONLY
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Per process system memlock (soft) limit = 128 GB

Total Shared Global Region in Large Pages = 770 MB (100%)

Large Pages used by this instance: 385 (770 MB)
Large Pages unused system wide = 0 (0 KB)
Large Pages configured system wide = 385 (770 MB)
Large Page size = 2048 KB
********************************************************************
--//并没有启动dism。

# ps -ef | grep ora_dis[m]

# lsof /u01/app/oracle/product/11.2.0.4/db_1/bin/oradism
--//后台不存在oradism的程序在执行。

# sysctl vm.nr_hugepages
vm.nr_hugepages = 350
--//可以发现内核vm.nr_hugepages没有修改。

# grep -i hugepage /proc/meminfo
AnonHugePages:     20480 kB
HugePages_Total:     385
HugePages_Free:      161
HugePages_Rsvd:      161
HugePages_Surp:       35
~~~~~~~~~~~~~~~~~~~~~~~~
Hugepagesize:       2048 kB

--//注意看下划线HugePages_Surp=35。等于像参数vm.nr_overcommit_hugepages借了35个hugepages。这样
--//350+35 = 385.

# ipcs -m
------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status
0x00000000 557056     oracle     640        12582912   17
0x00000000 589825     oracle     640        792723456  17
0x56c108b0 622594     oracle     640        2097152    17

# ipcs -mu
------ Shared Memory Status --------
segments allocated 3
pages allocated 197120
pages resident  114688
pages swapped   0
Swap performance: 0 attempts     0 successes

SYS@book> shutdown immediate ;
ORA-01507: database not mounted
ORACLE instance shut down.

# sysctl vm.nr_hugepages
vm.nr_hugepages = 350

# grep -i hugepage /proc/meminfo
AnonHugePages:     12288 kB
HugePages_Total:     350
HugePages_Free:      350
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
--//内核参数vm.nr_hugepages依旧是350.相当于收回35个hugepages。

4.测试3:
--//测试3,设置use_large_pages任何值,是否都会执行oradism。

# grep -i ^vm /etc/sysctl.d/98-oracle.conf
vm.nr_hugepages = 385
vm.nr_overcommit_hugepages = 50

# sysctl -p  /etc/sysctl.d/98-oracle.conf
fs.file-max = 6815744
kernel.sem = 250 32000 100 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 = 385
vm.nr_overcommit_hugepages = 50

--//use_large_pages=only.
SYS@book> alter system set use_large_pages=only scope=spfile ;
System altered.
--//关闭数据库略。

$ strace -ff -o aaa sqlplus -s -l / as sysdba <<<"startup nomount"
ORACLE instance started.

Total System Global Area  801701888 bytes
Fixed Size                  2257520 bytes
Variable Size             285216144 bytes
Database Buffers          507510784 bytes
Redo Buffers                6717440 bytes
--//可以正常启动实例,说明在use_large_pages=only下没有启动dism。
--//注意几点,注意这样strace会产生许多aaa.<spid>的文件,建议测试前单独建立一个空目录,在此目录下执行strace命令。

$ ls -l aaa.*|wc
     43     344    2837
--//另外要关闭strace的执行跟踪,需要打开另外会话关闭数据库命令。
--//后续的测试略,仅仅记录测试结果。

--//use_large_pages=false
$ strace -ff -o aaa sqlplus -s -l / as sysdba <<<"startup nomount"
ORACLE instance started.

Total System Global Area  801701888 bytes
Fixed Size                  2257520 bytes
Variable Size             285216144 bytes
Database Buffers          507510784 bytes
Redo Buffers                6717440 bytes

--//use_large_pages=true
$ strace -ff -o aaa sqlplus -s -l / as sysdba <<<"startup nomount"
ORACLE instance started.
Total System Global Area  801701888 bytes
Fixed Size                  2257520 bytes
Variable Size             285216144 bytes
Database Buffers          507510784 bytes
Redo Buffers                6717440 bytes

--//use_large_pages=auto
$ strace -ff -o aaa sqlplus -s -l / as sysdba <<<"startup nomount"
ORACLE instance started.

Total System Global Area  801701888 bytes
Fixed Size                  2257520 bytes
Variable Size             285216144 bytes
Database Buffers          507510784 bytes
Redo Buffers                6717440 bytes

# lsof /u01/app/oracle/product/11.2.0.4/db_1/bin/oradism
--//可以发现与测试1的情况完成不同。因为vm.nr_hugepages = 385,满足启动实例需求,不会启动dism。

--//use_large_pages=auto
--//修改vm.nr_hugepages = 350。
# grep -i ^vm /etc/sysctl.d/98-oracle.conf
vm.nr_hugepages = 350
vm.nr_overcommit_hugepages = 50

# sysctl -p  /etc/sysctl.d/98-oracle.conf

--//重复测试:
$ strace -ff -o aaa sqlplus -s -l / as sysdba <<<"startup nomount"
ORACLE instance started.

Total System Global Area  801701888 bytes
Fixed Size                  2257520 bytes
Variable Size             285216144 bytes
Database Buffers          507510784 bytes
Redo Buffers                6717440 bytes
--//嗯,居然可以正常启动.

# lsof /u01/app/oracle/product/11.2.0.4/db_1/bin/oradism

# ipcs -m

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status
0x00000000 1605632    oracle     640        12582912   16
0x00000000 1638401    oracle     640        398458880  16
0x00000000 1671170    oracle     640        197132288  16
0x00000000 1703939    oracle     640        100663296  16
0x00000000 1736708    oracle     640        25165824   16
0x00000000 1769477    oracle     640        71303168   16
0x56c108b0 1802246    oracle     640        2097152    16
--//可以发现实际上使用混合模式.

# ipcs -mu

------ Shared Memory Status --------
segments allocated 7
pages allocated 197120
pages resident  112985
pages swapped   0
Swap performance: 0 attempts     0 successes

--//alert日志:
Starting ORACLE instance (normal)
WARNING: -------------------------------
WARNING: oradism did not start up correctly.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Return code: 16 errno 0 info1 54321 info2 65535
----------------------------------------
Oradism binary does not have root privilege.
Please verify if oradism has required privilege
Oradism Spawned failed for largepages allocation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
************************ Large Pages Information *******************
Parameter use_large_pages = AUTO
Per process system memlock (soft) limit = 128 GB

Total Shared Global Region in Large Pages = 700 MB (90%)

Large Pages used by this instance: 350 (700 MB)
Large Pages unused system wide = 0 (0 KB)
Large Pages configured system wide = 350 (700 MB)
Large Page size = 2048 KB
Time taken to allocate Large Pages = 0.000000 sec

RECOMMENDATION:
  Total System Global Area size is 770 MB. For optimal performance,
  prior to the next instance restart:
  1. Increase the number of unused large pages by
 at least 35 (page size 2048 KB, total size 70 MB) system wide to
  get 100% of the System Global Area allocated with large pages
********************************************************************
--//注意看下划线,oradism启动失败,实际上切换到use_large_pages = true的情况。

# grep -i hugepage /proc/meminfo
AnonHugePages:     26624 kB
HugePages_Total:     350
HugePages_Free:      161
HugePages_Rsvd:      161
HugePages_Surp:        0
Hugepagesize:       2048 kB

--//过滤收集alert相关use_large_pages以及dism相关信息:
$ egrep -ni "Parameter use_large_pages = |dism"  alert_book.log
5:DISM started, OS id=3422
7:Parameter use_large_pages = AUTO
128:Parameter use_large_pages = AUTO
251:Parameter use_large_pages = ONLY
371:Parameter use_large_pages = ONLY
491:Parameter use_large_pages = ONLY
613:Parameter use_large_pages = FALSE
732:Parameter use_large_pages = FALSE
973:Parameter use_large_pages = AUTO
1094:Parameter use_large_pages = AUTO
1215:WARNING: oradism did not start up correctly.
1218:Oradism binary does not have root privilege.
1219:Please verify if oradism has required privilege
1220:Oradism Spawned failed for largepages allocation
1222:Parameter use_large_pages = AUTO

--//可以仅仅在use_large_pages = AUTO的情况下,2次出现dism相关信息,结合整个测试过程,可以发现vm.nr_hugepages不足的情况下
--//才会启动dism,而21c的情况完全不同,不管use_large_pages设置什么,都会执行oradism命令,但是仅仅出现auto以及auto_only的情
--//况下保留后台进程ora_dism_<sid>。

5.收尾:
SYS@book> alter system set use_large_pages=only scope=spfile ;
System altered.

# grep -i ^vm /etc/sysctl.d/98-oracle.conf
vm.nr_hugepages = 385
vm.nr_overcommit_hugepages = 50

# sysctl -p  /etc/sysctl.d/98-oracle.conf
fs.file-max = 6815744
kernel.sem = 250 32000 100 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 = 385
vm.nr_overcommit_hugepages = 50
posted @ 2026-04-25 20:28  lfree  阅读(3)  评论(0)    收藏  举报