I traced the system calls of oracle processes..
They all set their soft limits to be equal to their hard limits..
for example: sqlplus "/as sysdba"; startup OR LOCAL=NO processes, or background processes...
They all have their soft limits set to their hard limits values.
They do that upon starting up I think..
Here is the system calls used;
For example: Soft open files 39000, and hard open files 40000
An oracle process strace ->
getrlimit(RLIMIT_NOFILE, {rlim_cur=39000, rlim_max=40000}) = 0
setrlimit(RLIMIT_NOFILE, {rlim_cur=40000, rlim_max=40000}) = 0
so even if there is only a little difference in soft and hard limits, oracle processes set their limits to be equal as their hard limits.
Then why do we set those soft limits???
My quesses are :
1)there are some oracle processes which cant modify their soft limits , I mean there may be some oracle processes which cant increase their open file limits up to hard limit.. So, that's why oracle recommends a soft limit such as 16384 for soft limit of open files.
Or
2)Maybe there are some points in the code, which must not break.. The soft limits are there to guarantee these points to be executed without any problems..
What do you think?