环境:
weblogic 9+orcale91+unix错误:
Cannot get a connection, pool exhausted,然后 一个application 再也获取不了connection,总报这个错误。检测code,暂时没有发现connection没有关闭的错误。但是在log中发现,还有一个错误,因为另外一个task是,经常会运行的,
这个task会一直报错:The connection is closing while there are still uncommitted transactions.
就是说一个connection 被commit后,后面接着又有 一些对数据库的操作,但是那些操作可能没有被commit.我在想 这个会不会是 connection, pool exhausted 的原因,如果是的话,可不可以帮忙分析一下原因,还望大家给点意见。

解决方案 »

  1.   

    pool中的connnection已经耗尽?
    你的connection pool中链接上限搞大点试试看
      

  2.   

    谢谢,
      我可能没有说清楚,pool中的connnection是已经耗尽,我想找出为什么会耗尽。
      因为不解决的话,可能就算增大了,以后还是会耗尽。
    现在我怀疑是不是有可能 是因为uncommitted transactions, 
    因为如果有很多uncommitted transactions,这些connection 会不会返回connection pool呢?
      

  3.   

    比如说用proxool,commit之后还是要做conn.close(),不过这里的CLOSE其实并不是直接关了,只是交回池去管理,不知LZ有没做类似CLOSE的操作
      

  4.   

    谢谢你,
    其实我怀疑的问题就是,
    如果有很多uncommitted transactions,这些connection 会不会等conn.close后立即返回connection pool呢?
    还是说 要有一段时间去 响应,如果这些uncommitted transactions要去被执行或者被抛弃的话。
    这样的话,uncommitted transactions 会不会占着connection 不释放到connection pool中去。
      

  5.   

    连接池耗尽可能:
    1)连接池小了
    2)事务结束没有释放资源
    3)数据库事务过长,迟迟不释放,占用了连接池
    4)事务隔离级别不合理,等级过高
    5)事务死锁以上的本质都是连接池不够用了,先检视下代码,排除资源没有释放的bug
    再调整一下事务隔离级别(Hibernate,jdbc,weblogic或者oracle中都可以设置)修改完毕后适当增加连接池容量,加大10%-20%
      

  6.   

    谢谢你,
    我想应该是资源没有释放connection,但是在想办法查为什么,
    目前只发现有很多uncommitted transactions, 不知道这个会不会导致connetion 没有被释放。
      

  7.   

    你得才尝试,把后台task停掉,看看连接会不会耗尽,这样可以判断出和后台task有没关系了。
      

  8.   

    task肯定有问题。检查一下数据库关闭connection的代码。
      

  9.   

    我用的是tomcat,就连接池被耗尽这个问题,我的解决方法是:
    1重启tomcat服务器 
    2吧maxactive值调大 
    3在finally中关闭conn
      

  10.   

    其实我就是只想知道,到底
    如果很多个connection 没有被 commit,
    会不会对connection pool有影响,
    有没有人能从这个上面给点意见,明天揭帖,谢谢!