一台机器,配置为64G内存,
但修改内核参数以后,主机可以认到64G内存,但在启动oracle时,报错:
SQL> startup
ORA-27102: out of memory
Linux-x86_64 Error: 12: Cannot allocate memory
当oracle SGA最大值超过6G时,就报这个错。
原因是什么呢?
经过检查,发现内核参数,需要调整:
kernel.core_uses_pid = 1
kernel.shmmax=10737418240
kernel.sem=250 32000 100 128
# kernel.shmall=2500000
kernel.shmall=4194304
kernel.shmmax 的单位是字节;kernel.shmall的单位是页。对于32位系统,一页=4k,也就是4096字节。kernel.shmall = 2097152 就是 2097152*4k/1024/1024 = 8G 就是说可用共享内存一共8G。
设置的一般规律
kernel.shmall = 2097152 ---内存8G
kernel.shmall = 4194304 ---内存16G
kernel.shmall = 8388608 ---内存32G
kernel.shmall = 16777216 ---内存64G
这样再修改:
该文件指定内核所允许的最大共享内存段的大小
kernel.shmax = 42949672960 40G内存可用
这样SGA区就可以调成到32GB, 不成问题,达到最高性能。