dbcp的基本配置

  1. initialSize :链接池启动时建立的初始化链接数量(默认值为0)
  2. maxActive :链接池中可同时链接的最大的链接数(默认值为8,调整为20,高峰单机器在20并发左右,本身根据应用场景定)
  3. maxIdle:链接池中最大的空闲的链接数,超过的空闲链接将被释放,若是设置为负数表示不限制(默认为8个,maxIdle不能设置过小,由于假如在高负载的状况下,链接的打开时间比关闭的时间快,会引发链接池中idle的个数 上升超过maxIdle,而形成频繁的链接销毁和建立,相似于jvm参数中的Xmx设置)
  4. minIdle:链接池中最小的空闲的链接数,低于这个数量会被建立新的链接(默认为0,调整为5,该参数越接近maxIdle,性能越好,由于链接的建立和销毁,都是须要消耗资源的;可是不能太大,由于在机器很空闲的时候,也会建立低于minidle个数的链接,相似于jvm参数中的Xmn设置)
  5. maxWait  :最大等待时间,当没有可用链接时,链接池等待链接释放的最大时间,超过该时间限制会抛出异常,若是设置-1表示无限等待(默认为无限,调整为60000ms,避免因线程池不够用,而致使请求被无限制挂起)
  6. poolPreparedStatements:开启池的prepared(默认是false,未调整,通过测试,开启后的性能没有关闭的好。)
  7. maxOpenPreparedStatements:开启池的prepared 后的同时最大链接数(默认无限制,同上,未配置)
  8. minEvictableIdleTimeMillis  :链接池中链接,在时间段内一直空闲, 被逐出链接池的时间
  9. (默认为30分钟,能够适当作调整,须要和后端服务端的策略配置相关)
  10. removeAbandonedTimeout  :超过期间限制,回收没有用(废弃)的链接(默认为 300秒,调整为180)
  11. removeAbandoned  :超过removeAbandonedTimeout时间后,是否进 行没用链接(废弃)的回收(默认为false,调整为true
    removeAbandoned参数解释:
    1. 若是开启了removeAbandoned,当getNumIdle() < 2) and (getNumActive() > getMaxActive() - 3)时被触发.
    2. 举例当maxActive=20, 活动链接为18,空闲链接为1时能够触发"removeAbandoned".可是活动链接只有在没有被使用的时间超 过"removeAbandonedTimeout"时才被回收
    3. logAbandoned: 标记当链接被回收时是否打印程序的stack traces日志(默认为false,未调整)
     
    通常会是几种状况出现须要removeAbandoned: 
    1. 代码未在finally释放connection , 不过咱们都用sqlmapClientTemplate,底层都有连接释放的过程
    2. 遇到数据库死锁。之前遇到事后端存储过程作了锁表操做,致使前台集群中链接池全都被block住,后续的业务处理由于拿不到连接全部都处理失败了。

 

2. dbcp的连接validate配置
  1. dbcp是采用了commons-pool作为其链接池管理,testOnBorrow,testOnReturn, testWhileIdle是pool是提供的几种校验机制,经过外部钩子的方式回调dbcp的相关数据库连接(validationQuery)校验
  2. dbcp相关外部钩子类:PoolableConnectionFactory,继承于common-pool PoolableObjectFactory
  3. dbcp经过GenericObjectPool这一入口,进行链接池的borrow,return处理
  4. testOnBorrow : 顾明思义,就是在进行borrowObject进行处理时,对拿到的connection进行validateObject校验
  5. testOnReturn : 顾明思义,就是在进行returnObject对返回的connection进行validateObject校验,我的以为对数据库链接池的管理意义不大
  6. testWhileIdle : 关注的重点,GenericObjectPool中针对pool管理,起了一个Evict的TimerTask定时线程进行控制(可经过设置参数timeBetweenEvictionRunsMillis>0),定时对线程池中的连接进行validateObject校验,对无效的连接进行关闭后,会调用ensureMinIdle,适当创建连接保证最小的minIdle链接数。
  7. timeBetweenEvictionRunsMillis,设置的Evict线程的时间,单位ms,大于0才会开启evict检查线程
  8. validateQuery, 表明检查的sql
  9. validateQueryTimeout, 表明在执行检查时,经过statement设置,statement.setQueryTimeout(validationQueryTimeout)
  10. numTestsPerEvictionRun,表明每次检查连接的数量,建议设置和maxActive同样大,这样每次能够有效检查全部的连接.
相关文章
相关标签/搜索