oracle启动遭遇ORA-27102: out of memory该怎么办,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
OS: linux 2.6.9-103.ELsmp #1 SMP
DB: 10205, 4节点RAC
背景:
节点1前几天重启维护,3个instance起来了俩,第3个TEST03N1启动时不断报错
$ $ORACLE_HOME/bin/sqlplus / as sysdba
SQL*Plus: Release 10.2.0.5.0 - Production on Mon Sep 16 04:30:06 2013
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
Connected to an idle instance.
SQL> startup nomount;
ORA-27102: out of memory
Linux-x86_64 Error: 28: No space left on device
诊断思路:
首先想到的是共享内存耗光了
$ ipcs -a
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0xa637e870 0 oracle 640 132120576 17
0x00000000 131073 oracle 660 4297064448 1 dest
0x09c77ebc 229378 oracle 660 4297064448 36
0x9b377f58 262147 oracle 640 4297064448 38
根据当前instance进程数判断,第一行属于ASM,后两个为另外两个instance,而第2行没有被占用,应该是TEST03N1关闭时linux回收共享内存段失败导致的;
$ cat /proc/sys/kernel/shmmax
12884901888
$ cat /proc/sys/kernel/shmall
4194304
PAGESIZE为4K,最大允许共享内存4194304*4096= 17179869184,当前已占用4297064448*3+132120576= 13023313920,还剩余4156555264= 3964M;
而TEST03N1的SGA_MAX_SIZE/SGA_TARGET=4G,所以会报out of memory.
而ipcrm不起作用
$ ipcrm -m 131073
经过一系列测试,可允许设置的SGA_MAX_SIZE/SGA_TARGET最大值为3952M.
此时的共享内存段使用情况
$ ipcs -a
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0xa637e870 0 oracle 640 132120576 17
0x00000000 131073 oracle 660 4297064448 1 dest
0x09c77ebc 229378 oracle 660 4297064448 40
0x9b377f58 262147 oracle 640 4297064448 40
0x7ede1a40 557060 oracle 640 4146069504 43
大约还剩余10M左右
SQL> select to_char(17179869184-4297064448*3-132120576-4146069504) from dual;
TO_CHAR(
--------
10485760
SQL> select 10485760/1024/1024 from dual;
10485760/1024/1024
------------------
10
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。