Well, you're not out of RAM, but that doesn't mean you're not "out" of swap.
Solaris does not do memory overcommit. So if a process does a malloc() call for 16 GB, the OS will reserve 16 GB of swap for that process. Even if the process never uses any of that 16 GB so that it shows up as allocated memory in the mdb ::memstat output above, it still gets reserved. Even if you've never used it.
And if that process calls fork(), the child process will get another 16 GB of swap reserved. Or not - if it's not there, the fork() could fail (I don't remember exactly what happens offhand). Or, you could wind up seeing your swap error message.
Are you seeing any types of failures in application logs, or /var/adm/messages? Generally, if you really are running out of swap you should see something there.
Something is definitely reserving swap space, the question is what. What does "prstat -s size" show? Then you can use "pmap" on the big ones and hopefully find which one(s) are mapping a lot of anonymous memory.
Another possibility are shared memory segments. There are ways to create those that don't use any swap space because they get locked into memory. I know DISM segments do use swap because those aren't locked into memory like plain ISM segments.
---------- Post updated at 06:09 PM ---------- Previous update was at 06:06 PM ----------
And FWIW, if you do "uname -a" you'll see "SunOS ... 5.10 ...". Solaris replaced SunOS 4.x, so it's SunOS 5.x. Solaris 8 would be SunOS 5.8. Solaris 11 is SunOS 5.11.
It's oracle. We have that problem any time a dba resizes SGA. That 100% usage in prstat is your clue.
Mount another new disk to the system. Use mkfile to create about about 400-500GB of swap space on the device. Rule of thumb with oracle: 2xRAM size == total swap space. Add the the swap with the swap -a command. This is sketchy on details, but if you need exact advice try:
I wish I could remember enough about the Oracle installations I've worked on to know if we didn't really need to do that. If the SGA is configured to use intimate shared memory (ISM), then it won't require any swap reservation because ISM is locked into RAM and can't be swapped out.
Note that you do NOT want to use DISM - that does require swap reservation.