Oracle实例内存溢出解决方法

问题现象:

安装完oracle后,已设置开机自启动,重启数据库服务器验证自启动是否生效,但数据库实例未自动启动,在登录sqlplus时,手动启动数据库实例提示内存溢出:

[oracle@localhost ~]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.4.0 Production on 星期五 9月 4 16:30:52 2020

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

SQL> conn /as sysdba;

已连接到空闲例程。

SQL> startup;

ORA-27102: out of memory

Linux-x86_64 Error: 28: No space left on device

Additional information: -2147483648

Additional information: 1

处理方法:

通过资料查询主要是 kernel.shmal、kernel.shmmax这两个参数设置有问题,kernel.shmall参数需要根据页面大小和物理内存的实际情况做调整

1、首先查看物理内存大小

[root@localhost ~]# top

top - 16:32:18 up 23 min,  2 users,  load average: 0.00, 0.01, 0.05

Tasks: 308 total,   2 running, 306 sleeping,   0 stopped,   0 zombie

%Cpu(s):  0.3 us,  0.7 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

KiB Mem : 32246276 total, 30923748 free,   778316 used,   544212 buff/cache

KiB Swap: 16252924 total, 16252924 free,        0 used. 30988228 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                             

 24846 root      20   0  162144   2380   1548 R   5.9  0.0   0:00.03 top                                                                 

     1 root      20   0  194732   7880   4176 S   0.0  0.0   0:02.88 systemd      

2、其次查看数据库的 kernel.shmal、kernel.shmmax这两个参数。

服务器内存大于8G,不再是默认的2097152,即2GB

shmall 是全部允许使用的共享内存大小,shmmax 是单个段允许使用的大小。这两个可以设置为内存的 90%。例如 16G 内存,16*1024*1024*1024*90% 15461882265,shmall 的大小为 15461882265/4k(getconf PAGESIZE可得到) 3774873。

3、修改参数/etc/sysctl.conf

kernel.shmall = 3774873

kernel.shmmax = 15461882265

4、修改后执行检查

[root@localhost ~]# sudo sysctl -p

kernel.shmall = 3774873

kernel.shmmax = 15461882265

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

fs.file-max = 6815744

net.ipv4.ip_local_port_range = 1024 65000

net.core.rmem_default = 1048576

net.core.rmem_max = 1048576

net.core.wmem_default = 262144

net.core.wmem_max = 262144

5、查看实际使用情况

 [root@localhost ~]# ipcs -l

---------- 消息限制 -----------

系统最大队列数量 = 32768

最大消息尺寸 (字节) = 8192

默认的队列最大尺寸 (字节) = 16384

---------- 同享内存限制 ------------

最大段数 = 4096

最大段大小 (千字节) = 15099494

最大总共享内存 (千字节) = 15099492

最小段大小 (字节) = 1

--------- 信号量限制 -----------

最大数组数量 = 128

每个数组的最大信号量数目 = 250

系统最大信号量数 = 32000

每次信号量调用最大操作数 = 100

信号量最大值 = 32767

6、 重启数据库得到解决

[oracle@localhost ~]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.4.0 Production on 星期五 9月 4 16:39:10 2020

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

SQL> conn /as sysdba;

已连接到空闲例程。

SQL> startup;

ORACLE 例程已经启动。

Total System Global Area 9887760384 bytes

Fixed Size     2261688 bytes

Variable Size  1711279432 bytes

Database Buffers  8153726976 bytes

Redo Buffers    20492288 bytes

数据库装载完毕。

数据库已经打开。

SQL> 

7、这个问题在linux 64位平台 oracle 9.2到11.2普遍存在。

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

過早

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值