当我尝试在Web应用程序中创建250个以上的线程时,出现“无法获取连接,池错误,超时,等待空闲对象错误”的消息。我正在使用JSF 2.0和Hibernate创建Web应用程序。
我尝试使用修改过的hibernate.xml,server.xml,context.xml以及mysql属性。
以下是我得到的。
WARN (JDBCExceptionReporter.java:233) - SQL Error: 0, SQLState: null ERROR (JDBCExceptionReporter.java:234) - Cannot get a connection, pool error Timeout waiting for idle object ERROR (BaseServlet.java:301) - ******** java.lang.Thread.getStackTrace(Thread.java:1426) Caused by: org.hibernate.exception.GenericJDBCException: Cannot open connection org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140) org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128) org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52) org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449) org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:160) org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:81) org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1473) sun.reflect.GeneratedMethodAccessor378.invoke(Unknown Source) Caused by: org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:114) org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) org.hibernate.connection.DatasourceConnectionProvider.getConnection(DatasourceConnectionProvider.java:92) org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:160) org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:81) org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1473) sun.reflect.GeneratedMethodAccessor378.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) Caused by: java.util.NoSuchElementException: Timeout waiting for idle object org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1144) org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106) org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) org.hibernate.connection.DatasourceConnectionProvider.getConnection(DatasourceConnectionProvider.java:92) org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:160) org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:81) org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1473) sun.reflect.GeneratedMethodAccessor378.invoke(Unknown Source)
如果对此有任何想法请帮助我......
也许您已为 “死” 连接设置了超时,并且某些查询花费的 时间更长 。这意味着您的 池从池中删除了繁忙的连接 (“死”),并向 数据库 请求另一个 连接 -直到数据库拔掉插头为止。
要调试此功能,请为连接池 启用日志记录 ,以便您可以看到它何时请求新连接。
还检查您的 mysql* 连接设置。并尝试在下一次(超出限制)使用完 数据库db 时 关闭连接 ,该连接状态将为 死 。 maxConnectionAge ***
maxConnectionAge