In our setup, we have one user accessing the database, so aside from system queries all cursors will be generated from one user having 1 login for each application instance.
In looking at the cursors for the biggest offender - one of our common username sessions - all of the queries were system queries. Other sessions with the common username are all queries from our system.
Our sessions typically will have 30 - 50 open cursors. I've looked at the data from Oracle, Tom Kyte, and other pros, and the advice sometimes seems ambiguous/unclear.
Our SESSION_CACHED_CURSORS is set to 20, and our OPEN_CURSORS is set to 300. We routinely go over 2500 open cursors, and get alerts from Oracle in the DB Console.
I'm beginning to wonder if the problem isn't that since we use only one user login for all sessions Oracle is adding together the cursor count from all sessions and coming up with it's numbers.