Welcome to the Ranch.
First thing I'd check is to make sure you're not leaking Connections. That's a common cause of this sort of error. And no, you can't just discard them and wait for the garbage collector. GC may not get around to it in time.
Another thing to look at is how long you're holding onto the Connections. Ideally,
you should grab one, do your work, and close the Connection as fast as you can. And incidentally, NEVER try to store a Connection in an HttpSession!
If you have a long-running process, you might want to look at making it run in batch mode rather than straight off a
Servlet request. Also don't spawn threads to do database work off servlet requests. It not only violates
JEE standards, it can crash other webapps or even Tomcat itself.
If you're pooling many more
JDBC Connections than Http Connections, then something's awry. Most webapps will have many functions that don't need a Connection at all, and rarely should any function require more than one at a time.