当前位置: 代码迷 >> J2EE >> 一个连接池的有关问题,请高手指教~ Cannot get a connection, pool exhausted
  详细解决方案

一个连接池的有关问题,请高手指教~ Cannot get a connection, pool exhausted

热度:219   发布时间:2016-04-22 02:13:44.0
一个连接池的问题,请高手指教~~~ Cannot get a connection, pool exhausted
一个连接池的问题,请高手指教~~~ Cannot get a connection, pool exhausted


异常有这么几个。。。
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool exhausted
at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:103)


Caused by: java.util.NoSuchElementException: Timeout waiting for idle object
at org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:756)


根据异常,看出来是连接池耗尽。 

这个有什么办法解决吗? 框架是s2sh + freemark. 
用总监封装的 conn = DbHelper.getConnection(); 方法。jdbc操作的时候,一台机器开2-3个线程,0.1秒一次的频率访问的时候就出现连接池不够用。 

但是用hibernate 里面的方法调用,一台机器开5个线程0.1秒一次的频率访问 暂时没有问题。 

问题出在用jdbc操作sql的这些方法里面。 

哪个高手有办法解决这个连接配置问题吗? 感激不尽!~~



------解决方案--------------------
检查下代码,每次用完连接后有没有主动关闭
------解决方案--------------------
你总监写的只有创建连接,没有关闭连接吗?

hibernate的话,它自己会进行维护~

就像2楼说的,是没有关闭连接引起的连接耗尽
------解决方案--------------------
探讨
你总监写的只有创建连接,没有关闭连接吗?

hibernate的话,它自己会进行维护~

就像2楼说的,是没有关闭连接引起的连接耗尽

------解决方案--------------------
搞定了就好。
------解决方案--------------------
5个线程0.1秒一次的频率访问,你这是用工具做的性能测试吗?

另外,还应该考虑连接失效的时间~
------解决方案--------------------
result.setAutoCommit(false);
这里跑出来一个 异常,那么 conn 就永远不会被回收。。。。
很显然,有写conn 没有被关闭。
你可以用ThreadLocal 绑定conn , 测试下。。。
  相关解决方案