i feel you need to reconfigure your Unix kernel interprocess communication parameters to accomodate the SGA structure of the Oracle server.
obtain a list of the system's current shared memory and semaphore segments and try and reset the SHMMAX & SHMSEG parameters according to your requirement (keeping in mind the number of separate instances you are going to have on your server)
The total allowable shared memory is determined by the formula SHMMAX * SHMSEG.
Do make sure to rebuild the kernel if you have changed the semaphore parameters.
This might be a possible solution to the above problem. i had once faced such a problem and i had solved it in the same way .
I don't think this is related to kernal parameters.
An ORA-4031 error is related to poor use of one of the memory pools. The error message will usually specify which pool it is trying to use when you get the ORA-4031. I would not be suprised to find you have shared pool fragmentation in your shared_pool.
Thank you so much Suvashish and Jeff for your replies and assistance.
We managed to isolate the problem. It was an intraweb application that we had running which somehow kept grabbing memory. It has since been taken off and things are back to normal.
I shall study the metalink document closely nevertheless as there's definitely much more we could do to configure the sga and share pool properly. Strangley, Oracle support failed to point us to this document.