64bit Redhat Linux,
[oracle@DB ~]$ uname -a
Linux DB 2.6.32-279.el6.x86_64 #1 SMP Wed Jun 13 18:24:36 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux
物理内存16G,SGA分配4G时,instance可以正常启动,超过4G了,就报“out of memory”的错误。
SQL> startup nomount pfile='/home/oracle/init.ora'
ORA-27102: out of memory
Linux-x86_64 Error: 28: No space left on device
查了一下metalink,说这个问题是内核参数shmall太小的缘故,查看当前内核参数设置:
$ cat /proc/sys/kernel/shmall
2097152
通常这个值也是缺省值,建议改大。修改内核参数配置文件/etc/sysctl.cfg:
kernel.shmmax = 8294967295
kernel.shmmni = 4096
kernel.shmall = 4194304
执行生效:
[root@DB ~]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 8294967295
kernel.shmmni = 4096
kernel.shmall = 4194304
kernel.msgmax = 8192
kernel.msgmnb = 32768
kernel.msgmni = 2048
kernel.sem = 512 64000 128 512
fs.file-max = 65536
fs.aio-max-nr = 1048576
net.core.rmem_max = 262144
net.core.wmem_max = 262144
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_rmem = 262144 262144 262144
net.ipv4.tcp_wmem = 262144 262144 262144
再次启动实例,正常。
参考文档:
Upon startup of Linux database get ORA-27102: out of memory Linux-X86_64 Error: 28: No space left on device (文档 ID 301830.1)
https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=678630284455922&id=301830.1&displayIndex=20&_afrWindowMode=0&_adf.ctrl-state=sjckvzhrj_101