You have to be able to quantify what you are seeing, we cannot help with really vague questions because we will start asking a bunch of questions about things like this:
For example:
is free memory unavailable?
how many processes are there and how many process slots are free?
are there lots of network connections in the TIMED_WAIT status?
are there a few processes that are using lots of resources?
And keep going until there is enough information to help. Consider putting together a much better question with lots of information based on problems you see in the system.
The bigger the process, the longer takes the fork.
Oracle DB processes might be a little better because they use a large portion of "shared memory".
Since also Solaris is from Oracle, you can consider analysis method/tools from Oracle.
Also OS patches often boost performance.
Also you can monitor your system.
E.g. on the command line do
vmstat 2
you can likely see a bottle neck: a big value in the "b" column means a slow disk, a big value in the "r" column means too much work for the CPU.
If you have a slow CPU, you can look how CPU time is distributed between "sy"s=kernel and "us"er=processes, and hopefully something is left for "id"le. (These values are in percent and sum up to 100.)
If you have a slow disk, you can break down this further with
iostat -D 2
or with the OS disk names (but long names are truncated)
iostat -nD 2
Looking for
netstat | grep 'TIME[_]WAIT'
is a good idea because these processes are waiting for the client to re-open the connection, they cannot be used for another client.
If there are too many processes in TIME_WAIT it can improve by tuning it down, say from