java程序员-http://www.it-ebooks.info/

年轻的我,脚踩大地,仰望天空,路还很长....

博客园 首页 新随笔 联系 订阅 管理

===============================================

<property name="maxActive" value="3" />  
<property name="maxIdle" value="2" />
<property name="maxWait" value="10000" />
<property name="timeBetweenEvictionRunsMillis" value="60000"/>
<property name="minEvictableIdleTimeMillis" value="180000"/>

===============================================

 

===============================================

public class XBasicDataSource extends BasicDataSource {
  @Override
  public synchronized void close() throws SQLException {
    DriverManager.deregisterDriver(DriverManager.getDriver(url));
    super.close();
  }
}

销毁连接数

===============================================

  maxWait="3000" 从池中取连接的最大等待时间,单位ms.  

   initialSize="10"  初始化连接  

   maxIdle="60"   最大空闲连接  

   minIdle="10"   最小空闲连接  

   maxActive="80" 最大活动连接

   validationQuery = "SELECT 1"  验证使用的SQL语句

   testWhileIdle = "true"      指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除.

   testOnBorrow = "false"   获取连接时不要测试,否则很影响性能,默认值是true  

   timeBetweenEvictionRunsMillis = "30000"  每30秒运行一次空闲连接回收器(独立的线程)

   minEvictableIdleTimeMillis = "1800000"  池中的连接空闲30分钟后被回收

   numTestsPerEvictionRun="10" 在每次空闲连接回收器线程(如果有)运行时检查的连接数量

   removeAbandoned="true"  连接泄漏回收参数,当可用连接数少于3个时才执行

   removeAbandonedTimeout="180"  连接泄漏回收参数,180秒,泄露的连接可以被删除的超时值  

 

 timeBetweenEvictionRunsMillis毫秒秒检查一次连接池中空闲的连接,把空闲时间超过minEvictableIdleTimeMillis毫秒的连接断开,直到连接池中的连接数到minIdle为止

 

默认未配置initialSize(默认值是0)和timeBetweenEvictionRunsMillis参数时,刚启动tomcat时,连接数是0。当应用有一个并发访问数据库时DBCP创建一个连接。
目前连接数量还未达到minIdle,但DBCP也不自动创建新连接已使数量达到minIdle数量(没有一个独立的工作线程来检查和创建)。
随着应用并发访问数据库的增多,连接数也增多,但都与minIdle值无关,很快minIdle被超越,minIdle值一点用都没有。
直到连接的数量达到maxIdle值,这时的连接都是只增不减的。 再继续发展,连接数再增多并超过maxIdle时,使用完的连接(刚刚空闲下来的)会立即关闭,总体连接的数量稳定在maxIdle但不会超过maxIdle。
但活动连接(在使用中的连接)可能数量上瞬间超过maxIdle,但永远不会超过maxActive。
这时如果应用业务压力小了,访问数据库的并发少了,连接数也不会减少(没有一个独立的线程来检查和销毁),将保持在maxIdle的数量。
 
默认未配置initialSize(默认值是0),但配置了timeBetweenEvictionRunsMillis=“30000”(30秒)参数时,刚启动tomcat时,连接数是0。马上应用有一个并发访问数据库时DBCP创建一个连接。
目前连接数量还未达到minIdle,每30秒DBCP的工作线程检查连接数是否少于minIdle数量,若少于就创建新连接直到达到minIdle数量。
随着应用并发访问数据库的增多,连接数也增多,直到达到maxIdle值。这期间每30秒DBCP的工作线程检查连接是否空闲了30分钟,若是就销毁。但此时是业务的高峰期,是不会有长达30分钟的空闲连接的,工作线程查了也是白查,但它在工作。到这里连接数量一直是呈现增长的趋势。
当连接数再增多超过maxIdle时,使用完的连接(刚刚空闲下来)会立即关闭,总体连接的数量稳定在maxIdle。停止了增长的趋势。但活动连接(在使用中的连接)可能数量上瞬间超过maxIdle,但永远不会超过maxActive。
这时如果应用业务压力小了,访问数据库的并发少了,每30秒DBCP的工作线程检查连接(默认每次查3条)是否空闲达到30分钟(这是默认值),若连接空闲达到30分钟,就销毁连接。这时连接数减少了,呈下降趋势,将从maxIdle走向minIdle。当小于minIdle值时,则DBCP创建新连接已使数量稳定在minIdle,并进行着新老更替。
 
配置initialSize=“10”时,tomcat一启动就创建10条连接。其它同上
 
http://itindex.net/detail/51010-httpclient-%E5%8E%9F%E7%90%86-%E6%97%B6%E5%BA%8F%E5%9B%BE  http连接池的实现原理
posted on 2017-04-10 16:09  gstsyyb  阅读(159)  评论(0编辑  收藏  举报