hibernate - 连接池异常: Cannot get a connection,池错误等待空闲对象超时

标签 hibernate exception tomcat grails apache-commons-dbcp

我正在生产环境中运行一个 Web 应用程序,该应用程序最近在承受某些压力后崩溃了。我猜想有 100-300 人在相似的时间访问该网站,我希望这能正常工作。

崩溃时的日志是:

org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException: Error executing tag <g:render>: Hibernate operation: could not inspect JDBC autocommit mode; uncategorize\
d SQLException for SQL [???]; SQL state [null]; error code [0]; Cannot get a connection, pool error Timeout waiting for idle object; nested exception is org.apache.commons.db\
cp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object at /WEB-INF/grails-app/views/layouts/file.gsp:37
        at gsp_file_gsp$_run_closure2.doCall(file_gsp.groovy:43)
        at gsp_file_gsp$_run_closure2.doCall(file_gsp.groovy)
        at gsp_file_gsp.run(gsp_file_gsp.groovy:48)
        at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
        at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
        at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:774)
        at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
        at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:896)
        at java.lang.Thread.run(Thread.java:662)
Caused by: org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: could not inspect JDBC autocommit mode; uncategorized SQLException for SQL [???]; SQL stat\
e [null]; error code [0]; Cannot get a connection, pool error Timeout waiting for idle object; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot get a co\
nnection, pool error Timeout waiting for idle object
        at User.find(User.groovy:68)
        at User$find.call(Unknown Source)
        at gsp_pps_file_gsp.run(gsp_file_gsp.groovy:22)
        ... 9 more
Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object
        at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:114)
        at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
        at $Proxy7.getAutoCommit(Unknown Source)
        ... 12 more
Caused by: java.util.NoSuchElementException: Timeout waiting for idle object
        at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1144)
        at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)
        ... 14 more

我认为这与我最近添加到影响连接池的 Grails 项目的一些代码直接相关(尽管我认为这不是 grails 特定的问题):

maxActive = 50
maxIdle = 15
minIdle = 5
initialSize = 15
minEvictableIdleTimeMillis = 180000
timeBetweenEvictionRunsMillis = 180000
maxWait = 10000
validationQuery = "/* ping */"

我做错了什么?请帮忙!谢谢。

最佳答案

将相关部分改成:

minEvictableIdleTimeMillis=1800000
timeBetweenEvictionRunsMillis=1800000
numTestsPerEvictionRun=3
testOnBorrow=true
testWhileIdle=true
testOnReturn=true
validationQuery="SELECT 1"

这应该可以解决这个问题。

关于hibernate - 连接池异常: Cannot get a connection,池错误等待空闲对象超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7277760/

相关文章:

hibernate - 将同一实体作为集合映射到自身

java - 将具有条件的列连接到 JPA 实体

java - 在 hibernate 中调用返回 varchar 的 mysql 函数

java - 错误 : unreported exception java. io.IOException;必须被捕获或宣布被扔出

tomcat - Jenkins 在运行 Maven 时出现权限被拒绝的错误

java - Hibernate 5 是否仍然支持 Hibernate Spatial?

java - 在 Windows 中从命令行执行 java 程序失败

java - 使用扫描仪出现 NoSuchElementException

java - 为什么不能将 com.sun.xml.internal.messaging.saaj.soap.impl.TextImpl 转换为 javax.xml.soap.SOAPBodyElement

java - 我在 context.xml 中添加的标签何时被读取?