ORACLE在各操作系统信号量与共享内存的维护

来源:这里教程网 时间:2026-03-03 12:46:32 作者:

---------- 信号量与共享内存设置 ---------- 1.LIUNX cat /etc/sysctl.conf 共享内存: kernel.shmall = 2097152 # 可以使用的共享内存的总量,单位:页。 取值:推荐大于shmmax/page_size(getconf PAGE_SIZE 一般4096) kernel.shmmax = 2147483648 # 最大单个共享内存段大小。           取值:推荐大于sag_max_size kernel.shmmni = 4096 # 整个系统共享内存段的最大数目。              取值:默认值 信号量: kernel.sem = 5010 641280 5010 128 #SEMMSL, SEMMNS, SEMOPM, SEMMNI 每个信号对象集的最大信号对象数;系统范围内最大信号对象数;每个信号对象支持的最大操作数;系统范围内最大信号对象集数。 SEMMSL 设置:最小250;对于processes参数设置较大的系统建议设置为processes+10 SEMMNS 设置:至少32000;SEMMSL * SEMMNI  SEMOPM 设置:至少100;或者等于SEMMSL  SEMMNI 含义:linux系统信号量set最大个数  设置:最少128  2.HPUX 信号量: kctune -h -B semmni="4096"   全系统的最大信号量                                 Default:  nproc(全系统进程的最大数) kctune -h -B semmns="16384"  全系统内,用户可访问的最大信号量  Default:  semmni*2 kctune -h -B semmnu="4092"   每个信号量的最大数                                Maximum:  nproc-4 kctune -h -B semvmx="32767"  所允许的信号量值的最大数                    Maximum:  65535 共享内存: kctune -h -B shmmax="34359738368"   最大共享内存段大小 kctune -h -B shmem=1                              启动/关闭共享内存 1(开启) kctune -h -B shmmni="4096"                   系统上的最大段 kctune -h -B shmseg="512"                     每个进程的最大段           Maximum:    shmmni 3.AIX AIX一般不用手工调整,而是系统动态的,如果运行后报共享内存或信号量不足,将maxuproc单个用户允许的最大进程数 调大即可(用命令smitty system或chdev)。 $su – root #chdev –l sys0 –a maxuproc=1000 4.Solaris 修改Solaris 9里/etc/system,参考值如下所示: 信号量: set semsys:seminfo_semmni=20000   指定最大信号标识符数 set semsys:seminfo_semmsl=29000   指定每个信号标识符的最大 System V 信号数 set semsys:seminfo_semmns=30000   系统上的最大 System V 信号数。 set semsys:seminfo_semopm=31000   指定每个 semop 调用的最大 System V 信号操作数。 set semsys:seminfo_semmnu=32000   System V 信号系统支持的撤消结构总数。 set semsys:seminfo_semume=10         可以由任一进程使用的最大 System V 信号撤消结构数 set semsys:seminfo_semvmx=32767   可以设置的最大信号值 共享内存: shmsys:shminfo_shmmni   对可以创建的共享内存段数设置的系统范围限制。 shmsys:shminfo_shmmax   可以创建的 System V 共享内存段的最大大小。 ---------- 信号量与共享内存管理 ---------- 1.ORACLE提供了sysresv工具管理共享内存以及信号量 $ sysresv -l "ORCL" 查看实例对应的信号量与共享内存 IPC Resources for ORACLE_SID "ORCL": Shared Memory: ID              KEY 65537           0x3b751258 Semaphores: ID              KEY 98304           0xe21c75d0 Oracle Instance alive for sid "ORCL" sysresv -f参数可以移除共享段(仅适用于实例不存在,操作系统共享段不释放条件) $ export ORACLE_SID=orcl  $ sysresv -f orcl 2.操作系统级别可以通过ipcs/ipcrm管理(多实例下可以结合sysresv确定) ipcs -a或ipcs 显示当前系统中共享内存段、信号量集、消息队列的使用情况; ipcs -m 显示共享内存段的使用情况; ipcs -s 显示信号量集的使用情况; ipcs -q 显示消息队列的使用情况; 清理相关共享内存、信号量,队列等共享信息命令如下: ipcrm -s semid 删除对应的信号量集 ipcrm -m shmid 删除对应的共享内存段 ipcrm -q msqid 删除对应的消息队列 3.经常有因为共享内存、信号量,队列等共享信息没有干净地清理而引起一些问题 比如: SQL> startup ORA-27154: post/wait create failed  ORA-27300: OS system dependent operation:semget failed with status: 28  ORA-27301: OS failure message: No space left on device  ORA-27302: failure occurred at: sskgpcreates 这个时就可能需要清理相关的信号量(也可以增加信号量值) 原文:https://blog.csdn.net/chinahuanghuajun/article/details/78143900 

相关推荐