Upon startup of Linux database get ORA-27102: out of memory Linux-X86_64 Error: 28: No space left on device

Issue

When trying to increase the SGA to approach half available RAM with an Oracle 64-bit version on a Linux 64-bit operating system, even though SHMMAX is set to match half the amount of RAM, you get the following error when trying to start the instance:

SQL> startup nomount
ORA-27102: out of memory
Linux-x86_64 Error: 28: No space left on device

LIkely cause is  :  shmall is too small, most likely is set to the default setting of 2097152

$ cat /proc/sys/kernel/shmall
2097152

SHMALL is the total amount of shared memory, in pages, that the system can use at one time.

Solution

Set SHMALL equal to the sum of all the SGAs on the system, divided by the page size. 

The page size can be determined using the following command: 

$ getconf PAGE_SIZE
4096

For example, if the sum of all the SGAs on the system is 16Gb and the result of  '$ getconf PAGE_SIZE' is 4096 (4Kb) then set shmall to 4194304 pages

As the root user set the SHMALL to 4194304 in the /etc/sysctl.conf file:

kernel.shmall = 4194304

then run the following command:

$ sysctl -p
$ cat /proc/sys/kernel/shmall
4194304

The above command loads the new value and a reboot is not necessary.

Switch back to the oracle user and retry the startup command.

Modifying /etc/sysctl.conf is a permanent workaround (applies at boot time). If for some reason you DO NOT want to change the system wide configuration, you can do it on the fly by 

$echo "4194304" > /proc/sys/kernel/shmall


Post a Comment

And that's all there is to it!

If anyone has any other questions or requests for future How To posts, you can either ask them in the comments or email me. Please don't feel shy at all!

I'm certainly not an expert, but I'll try my hardest to explain what I do know and research what I don't know.

Previous Post Next Post