Thanks for the response, see my comments inline below.
On Mon, Apr 1, 2013 at 3:49 PM, Daniel Mikusa <dmik...@vmware.com> wrote: > On Apr 1, 2013, at 3:31 PM, David Landis wrote: > > > Hi guys, > > > > When running a performance test on my system it starts fine, but after a > > while I start getting errors in my application log such as (see the > bottom > > for full stack trace): > > > > 2013-03-29 16:38:54,778 ERROR > > [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] - > > [SimpleAsyncTaskExecutor-12842] - [SimpleAsyncTaskExecutor-12842] > Timeout: > > Pool empty. Unable to fetch a connection in 30 seconds, none > > available[size:80; busy:0; idle:0; lastwait:30000]. > > This means you have no connections in your pool and it's unable to create > a new connection to your database. > OK, I'll have to investigate the DB setting more thoroughly. The maximum sessions and processes in Oracle are higher than we were using for the test though (several hundred). > > > > > Questions: > > > > 1.) I'm a little confused about what it means if no connections are > > available and yet none are "busy" nor "idle". What are the other > available > > states? > > The pool is empty. Further more the error above means that it can't > create a new connection either. Maybe your network failed? or the DB > kicked off all your application's connections? > Actually Oracle was showing 70+ inactive sessions for my app even though the connection pool was showing empty. > Were you ever able to get a connection to the DB? If you restart Tomcat, > can you get connections to the DB again? > Yes, restarting Tomcat results in a fresh pool of DB connections and the 70+ inactive sessions on the DB side are gone and replaced by 10 which is the initial size of the pool. > > Also, are there any limits on your DB user's account that might cause > problems with your performance tests? > Not that I know of, but I'll look further. I was expecting problems with the perf test eventually b/c it was set to simulate a couple hundred users and I only maxActive set to 80. That is fine. I'm more concerned with why the connection pool didn't eventually recover. > > > > > 2.) My other point of confusion is that assuming there is a connection > leak > > in the application, shouldn't setting removeAbandoned=true cause the DB > > connections to eventually be recovered? > > Yes. > > > What I am seeing is that even after > > a couple days of no application usage now I'm still getting that exact > > error seen above when trying to use the application. > > See above, something bad is happening in your environment, worse than your > application holding onto a connection. You're going to need to > troubleshoot further and see why you can't make connections to the DB. > > Dan > > > > > > > Thanks in advance. > > > > ---------------------------------------- > > > > environment: > > Tomcat 7.0.32 > > RedHat Linux 64 bit > > Java 7 > > > > context.xml: > > > > <Resource name="fdatasource" > > auth="Container" > > type="javax.sql.DataSource" > > factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" > > testWhileIdle="true" > > testOnBorrow="true" > > testOnReturn="true" > > validationQuery="select 1 from dual" > > validationInterval="30000" > > timeBetweenEvictionRunsMillis="5000" > > maxActive="80" > > minIdle="10" > > maxWait="30000" > > initialSize="10" > > removeAbandonedTimeout="1200" > > removeAbandoned="true" > > logAbandoned="true" > > minEvictableIdleTimeMillis="60000" > > jmxEnabled="false" > > jdbcInterceptors="StatementFinalizer" > > username="${db.user}" > > password="${db.pw}" > > driverClassName="oracle.jdbc.OracleDriver" > > url="${db.url}" /> > > > > example stacktrace: > > > > Mar 29, 2013 5:13:34 PM org.apache.catalina.core.StandardWrapperValve > invoke > > SEVERE: Servlet.service() for servlet [dispatcher] in context with path > > [/app] threw exception [Request processing failed; nested exception is > > org.springframework.transaction.CannotCreateTransactionException: Could > not > > open Hibernate Session for transaction; nested exception is > > org.hibernate.exception.GenericJDBCException: Could not open connection] > > with root cause > > org.apache.tomcat.jdbc.pool.PoolExhaustedException: > > [http-apr-8443-exec-158] Timeout: Pool empty. Unable to fetch a > connection > > in 30 seconds, none available[size:84; busy:0; idle:0; lastwait:30000]. > > at > > > org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:675) > > at > > > org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:188) > > at > > > org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:128) > > at > > > org.hibernate.service.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:141) > > at > > > org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:292) > > at > > > org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:297) > > at > > > org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:169) > > at > > > org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:67) > > at > > > org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:160) > > at > > > org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1395) > > at > > > org.springframework.orm.hibernate4.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:387) > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org > >