gpt4 book ai didi

spring - 我收到池错误超时等待空闲对象

转载 作者:IT老高 更新时间:2023-10-28 13:47:54 26 4
gpt4 key购买 nike

  <Resource name="jdbc/name" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql:url?autoReconnect=true"/>

我在Tomcat服务器中使用上述语句创建了连接池。

一些 android 应用程序正在使用网络服务与我的应用程序连接。通过网络服务,我正在发送和接收一些数据。我收到错误

SQLState: null
[2013-12-05 14:13:06,156]ERROR069688[http-8080-10] - org.hibernate.util.JDBCExceptionReporter.logExceptions(JDBCExceptionReporter.java:78) -
Cannot get a connection, pool error Timeout waiting for idle object

我看到了Connection Pool Exception: Cannot get a connection, pool error Timeout waiting for idle object .

但我不知道。

这是什么原因。

提前谢谢...

最佳答案

此异常表明池管理器无法生成与等待请求者的可行连接,并且 maxWait 已通过因此触发超时。有多种潜在原因,但通常分为两大类:

  1. 数据库已关闭或无法访问。这可能是因为您忘记启动它,或者它崩溃了,或者您和数据库之间的网络已经停止工作。但基本上,池无法提供有效的新连接,因此请求者等待新连接的时间超过了超时时间并放弃了。这通常是不太可能的情况,因为发生这种情况时您通常会看到其他错误。

  2. 连接池(设置为 100 最大事件)连接不足。这可能是由于高需求量,也可能是连接泄漏的迹象,其中连接永远不会返回到池中,最终您超过了最大连接限制。这是更可能的原因...通常是由于在完成数据库资源后未关闭它们而导致的连接泄漏。

如果说数据库遇到查询停止执行的错误,有时 1 和 2 会创建此场景。当这种情况发生时,它就像连接泄漏,因为新连接出去并阻塞对数据库的查询并且永远不会被释放。最终,所有连接都处于事件状态,并且下一个请求连接的线程将被放入等待队列,因为没有更多的连接可以发出。由于数据库已被冲洗,您不会看到任何其他异常,直到第一个请求者在等待队列中超时。当 Oracle DB 后端崩溃时,我们偶尔会在使用 Oracle UCP 时看到这种情况。

我建议在发生这种情况时使用 JConsole 监控数据库池大小,并确定触发此错误的上述两种原因中的哪一种。然后,您可以尝试修复连接或操作池大小/超时参数以适应实际需求(您也可以在 Tomcat 中操作连接器参数以减少对应用程序的整体需求)。如果您在 Tomcat 中运行,您通常可以只运行 JConsole(位于 JDK bin 目录中)并附加到 tomcat 进程,然后只需查看 JMX 控制台以找到找到池大小的位置......通常取决于数据源类型(dbcp vs oracle ucp vs etc)。然后,您可以双击字段值来绘制它们,以便随着时间的推移跟踪它们。

此外,您可能需要在 Tomcat 中启用 JMX 才能使 JConsole JMX 监控工作。

关于spring - 我收到池错误超时等待空闲对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20401254/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com