ORA-04030: out of process memory when trying to allocate 616 bytes (SQLA^b20dbe57,frodef:qcpitnm)
=======================================
PRIVATE MEMORY SUMMARY FOR THIS PROCESS
---------------------------------------
******************************************************
PRIVATE HEAP SUMMARY DUMP
42 MB total: <<<< 可见这个进程总共只allocate了42M的PGA
42 MB commented, 270 KB permanent
86 KB free (0 KB in empty extents),
37 MB, 2 heaps: "callheap " 44 KB free held
4990 KB, 1 heap: "session heap "
Private memory usage per Oracle process
-------------------------
Top 10 processes:
-------------------------
(percentage is of 3108 MB total allocated memory)
<<<< 所有Oracle进程总共allocate了3108M的PGA >>>>
1% pid 43: 42 MB used of 42 MB allocated <= CURRENT PROC
1% pid 11: 7558 KB used of 20 MB allocated (12 MB freeable)
......
Oct 31 11:03:58 xxxx genunix: [ID 470503 kern.warning] WARNING: Sorry, no swap space to grow stack for pid 24989 (oracle)
Oct 31 15:37:21 xxxx tmpfs: [ID 518458 kern.warning] WARNING: /tmp: File system full, swap space limit exceeded
Oct 31 17:11:28 xxxx genunix: [ID 470503 kern.warning] WARNING: Sorry, no swap space to grow stack for pid 23708 (oracle)
How does the Solaris Operating System Calculate Available Swap? (Doc ID 1010585.1)
When a process calls the malloc()/sbrk() commands, only virtual swap is allocated.
The operating system allocates the memory from physical disk-based swap first.
If disk-based swap is exhausted or unconfigured, the reservation is allocated from physical memory.
If both resources are exhausted then the malloc() call fails.
To ensure malloc() won't fail due to lack of virtual swap, configure a large physical disk-based swap
facility in the form of a device or swapfile. You can monitor swap reservation via "swap -s" and "vmstat:swap",
as described above.
Follow the guidelines below to calculate amount of virtual swap usage:
Virtual swap = Physical Memory + Fixed Disk swap