Doing some testing generating large (> 1000 pages) PDFs with concurrent users:

10 users: all return successfully in 2 minutes

15 users: all return successfully in 25 minutes

20 users: some return successfully in 50 minutes but others fail with a 500 return code from the server. Lot's of things going on, I know. But trying to login with one more user fails during the run and I'm seeing these in the logs:

ERROR [JDBCExceptionReporter] Cannot get a connection, pool exhausted

followed by:
ERROR [HibernateUtil] HIBUTIL.ERROR_0004 - beginTransaction() failed.
org.hibernate.exception.GenericJDBCException: Cannot open connection

My datasources are all:
factory="org.apache.commons.dbcp.BasicDataSourceFactory" maxActive="20"
so does the BI Server keep an open JDBC connection while each of these 'jobs' run?

Will try bumping up my maxActive connections next, but any other ideas?