In this
Document
Applies to:
Oracle Server - Enterprise Edition - Version 11.2.0.1 to 11.2.0.3
[Release 11.2]
IBM: Linux on System z
Symptoms
Random errors are see in the alert log relating to spawning of
processes such as:
@ Checked for relevance
on 17th Jan 2012
ORA-00445: background process "m001" did not start after 120
seconds
Incident details in:
/opt/u01/app/oracle/diag/rdbms/incident/incdir_3721/db1_mmon_7417_i3721.trc
ERROR: Unable to normalize symbol name for the following short
stack (at offset 2):
Tue Jun 21 03:03:06 2011
ORA-00445: background process "J003" did not start after 120
seconds
or
Waited for process W002
to initialize for 60 seconds
The system appears to be running very slowly and defunct processes
can appear.
Changes
REDHAT 5 kernel 2.6.18-194.el5 #1 SMP Tue Mar
16
Oracle 11.2.0.2 Single Instance
IBM: Linux on System z
Cause
Recent linux kernels have a feature called Address Space Layout
Randomization (ASLR).
ASLR is a feature that is activated by default on
some of the newer linux distributions.
It is designed to load shared memory objects in random
addresses.
In Oracle, multiple processes map a shared memory object at the
same address across the processes.
With ASLR turned on Oracle cannot guarantee the availability of
this shared memory address.
This conflict in the address space means that a process trying to
attach a shared memory object to a specific address may not be able
to do so, resulting in a failure in shmat subroutine.
However, on subsequent retry (using a new process) the shared
memory attachment may work.
The result is a random set of failures
Solution
It should be noted that this problem has only been positively
diagnosed in Redhat 5 and Oracle 11.2.0.2.
It is also likely, as per unpublished
BUG:8527473, that this issue will reproduce
running on Generic Linux platforms running any
Oracle 11.2.0.x. on Redhat/OEL kernels which have
ASLR. ASLR also exists in SLES10 and SLES 11 kernels and by default ASLR
is turned on, however, to date not problem has been seen on
SuSE.
You can verify whether ASLR is being used as follows:
# /sbin/sysctl -a | grep randomize
kernel.randomize_va_space = 1
If the parameter is set to any value other than 0 then ASLR is in
use.
On Redhat 5 to permanently disable ASLR.
add/modify this parameter in /etc/sysctl.conf
kernel.randomize_va_space=0
kernel.exec-shield=0
You need to reboot for kernel.exec-shield parameter to take
effect.
Note that both kernel parameters are required for ASLR to be
switched off.