栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

tomcat jdbc连接池中的连接丢失

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

tomcat jdbc连接池中的连接丢失

看一下ConnectionPool.java的源代码,您似乎在

borrowConnection()
方法中点击了以下代码片段:

        //we didn't get a connection, lets see if we timed out        if (con == null) { if ((System.currentTimeMillis() - now) >= maxWait) {     throw new SQLException("[" + Thread.currentThread().getName()+"] " +         "Timeout: Pool empty. Unable to fetch a connection in " + (maxWait / 1000) +         " seconds, none available["+busy.size()+" in use]."); } else {     //no timeout, lets try again     continue; }        }

因此,据此,您的连接为 Null

con
在以下行中检索的值:

PooledConnection con = idle.poll();

如果您跟踪代码,则将看到

idle
(取决于您的配置,但默认情况下)FairBlockingQueue。您可以检查实现以获取提示。

通常,您始终必须关闭ResultSet,语句和连接,并且使用的连接应正确释放回池中。如果操作不正确,可能会导致连接永不关闭=>不再可供重用(连接池“泄漏”)。

我建议您构造一些有关池状态的详细日志记录,并对其进行监视以找出问题所在。

Apache的一些防止数据库连接池泄漏的准则:

removeAbandoned="true"

废弃的数据库连接被删除并回收

removeAbandonedTimeout="60"

设置数据库连接空闲之前被认为已放弃的秒数

logAbandoned="true"

记录放弃了数据库连接资源的代码的堆栈跟踪。请记住,“记录废弃的连接会增加每次连接借用的开销,因为必须生成堆栈跟踪。”

我仍然认为稍微增加该

maxWait
值(1200、1500、1700-仅作实验,从用户角度来看响应时间没有差异)将清除那些仍然存在问题的罕见情况。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/466843.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号