当前位置: 首页 > 面试题库 >

我收到无法连接,池错误,超时,等待空闲对象,当我尝试在Web应用程序中创建250个以上线程时

林星阑
2023-03-14
问题内容

当我尝试在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 ***



 类似资料:
  • 问题内容: 当我尝试在Web应用程序中创建250个以上的线程时,出现“无法获得连接,池错误,超时,等待空闲对象错误”的消息。我正在使用JSF 2.0和Hibernate创建Web应用程序。 我尝试使用修改过的hibernate.xml,server.xml,context.xml以及mysql属性。 以下是我得到的。 如果对此有任何想法请帮助我...... 问题答案: 也许您已经为 “死” 连接设

  • 我正在使用多个线程在不同的表中插入插入记录。此外,我正在使用批处理的记录插入,以提高效率。 注意:要插入的记录数以百万为单位。 我的问题是,在这种多线程环境中,我应该使用连接池吗? 我关心的问题: 每个线程将运行相当长的时间来执行数据库操作。所以,如果我的连接池的大小是2,线程的数量是4,那么在给定的时刻只有2个线程将运行。因此,其他两个线程将会在很长一段时间内保持理想状态以获得连接,因为针对百万

  • 错误:任务“:app:ProcessDebugResources”执行失败。 com.android.ide.common.Process.processException:org.gradle.Process.internal.exeception:Process“command”c:\users\mohamed sallam\appdata\local\android\sdk\build-to

  • 我有一个名为Activity的实体类,该类一直在反序列化,工作正常,直到我决定向实体添加一个int类型的id字段。该字段的getter和setter是公共的,似乎很好,但是当我运行从客户端创建对象的测试时,我会遇到如下反序列化错误。我正在使用jersey学习REST教程。 我已经检查了这个字段的setter和getter的可见性,它们既不是包私有的,也不是私有的。 这是我得到的错误: 这是活动实体

  • 我在jboss中部署的模块与org有依赖关系。springframework:spring orm:4.3.16。释放我没有看到任何重复的依赖项添加到类路径中。根据例外情况,我了解到我的应用程序使用一个版本成功编译,并且在部署期间引用了另一个版本。但我在任何地方都看不到任何重复版本。 有谁能帮我解决这个问题吗?请在下面找到详细的例外情况。 {“WFLYCTL0080:失败的服务”=

  • 请参见日志文件2017-11-06 23:34:15下面的代码调试DispatcherServlet:861 -名为“Spring”的DispatcherServlet处理[/Insurance1/]的GET请求17-11-06 23:34:15 WARN page not found:1136-在名为“Spring”的DispatcherServlet中找不到具有URI[/insurace 1/