zoukankan      html  css  js  c++  java
  • org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object异常原因

    在使用tomcat的JNDI配置数据库连接时,如果没有使用想proxool,池c3p0这样的连接池组件时,tomcat将默认使用tomcat容器内建的DHCP连接池组建。

    我的jndi配置如下

        <Resource
          name="jdbc/NEWDB"
          type="javax.sql.DataSource"
          username="APDEV"
          password="123456"
          driverClassName="net.sourceforge.jtds.jdbcx.JtdsDataSource"
          maxIdle="2"
          maxWait="5000"
          url="jdbc:jtds:sqlserver://172.18.127.129:1433/NEWDB"
          maxActive="4"
       />

    为了在开发阶段尽可能的暴露是否存在连接未完全释放的问题,将maxActive和maxIdle参数都设置的比较小。

    有一种情况就是,如果某个页面存在大量的数据库查询操作(例如:此页面加载时将要建立4个connection),那么当我在此页面频繁的刷新页面时,将会抛出异常

     org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object

    经过调查发现,抛出此异常的原因为连接池泄漏,也就是再也无法从连接池中获取有效的数据库连接。

    频繁的刷新页面导致上一次获取的connection还没有得到有效释放,下一次的connection请求已经到达,如是刷新多次后导致池资源耗尽,即所谓的连接池泄漏。

       而且,在此种情况下,最糟糕的是异常发生后导致整个服务向连接池发起connection请求都将一直抛出如上异常,无法恢复到正常状态。服务宕机,必须重启tomcat才能恢复,这真是个可怕的事情。


  • 相关阅读:
    [JSOI2007][BZOJ1030] 文本生成器|AC自动机|动态规划
    [NOI2014][BZOJ3670] 动物园|KMP
    [HAOI2010][BZOJ2427] 软件安装|tarjan|树型dp
    [JSOI2008][BZOJ1017] 魔兽地图DotR|树型dp
    [JLOI2014][BZOJ3631] 松鼠的新家|树上倍增LCA|差分
    [SDOI2010][BZOJ1975] 魔法猪学院|A*|K短路
    [BZOJ1251] 序列终结者|Splay
    hdu 2141 Can you find it?
    hdu 3152 Obstacle Course
    hdu 2680 Choose the best route
  • 原文地址:https://www.cnblogs.com/danghuijian/p/4399977.html
Copyright © 2011-2022 走看看