文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

tomcat自带连接池dbcp配置以及优化说明

2023-06-02 17:00

关注

一个网站每天大概有20万的访问量,使用的tomcat自带dbcp连接池,一般网站访问很好,速度也很快,但是过一段时间后,总是报timeout waiting for idle object的异常信息,最后查了apache tomcat的官方文档,终于找到解决方法:

数据库连接池创建和管理池中的数据库连接对象。重建和复用已存在的连接对象要比创建新的连接要频繁的多。

连接池会存在这样一个问题。web应用已经明确关闭ResultSet,Statement,及Connection对象;当关闭出现故障的web应用所使用的资源
时将会导致这个连接资源不能在复用,这就是数据库连接池泄露,最终导致在你的应用程序中没有连接对象可以使用。


这当然是有解决方法的,Apache Commons DBCP可以配置为跟踪和恢复这些被弃的数据库连接对象。不仅恢复还可以跟踪那些连接数据库却没有关闭的代码片段。


要增加连接池中被弃的连接重新可用,打开配置文件,为Resource标签配置以下参数:

removeAbandonedOnBorrow=true
removeAbandonedOnMaintenance=true
removeAbandonedTimeout="60"
logAbandoned="true"

默认情况下removeAbandonedOnBorrow和removeAbandonedOnMaintenance都是为false。

注意:removeAbandonedOnMaintenance只有在timeBetweenEvictionRunsMillis设置为正数的情况下才有效。

removeAbandonedTimeout属性是设置数据库连接被释最多空闲时间多少秒之后设置为空闲。默认移除废弃连接的时间为300秒。

提示:

如果启用removeAbandonedOnMaintenance 或 removeAbandonedOnBorrow,那些被认为废弃的连接对象有可能被池回收。这个机制以下情况下会触发:
当getNumIdle() < 2并且getNumActive() > getMaxTotal() - 3及emoveAbandonedOnBorrow 设置为true时;或 当removeAbandonedOnMaintenance设置为true并且回收完成时。
打个比方说:
如果设置maxTotal=20,当有18个活跃连接、1个空闲连接时会触发removeAbandonedOnBorrow,不过仅是那些使用时间超过removeAbandonedTimeout秒数的活动连接才会被移除(默认是300秒)
,遍历resultset不作为正在使用。创建Statement,PrepareStatement或CallableStatement或使用其中一个执行查询(执行exceute方法)重置父连接的lastUsed属性。

 

DBCP连接池配置参数讲解

-----------------------------

一、Apache官方DBCP文档给出的配置示例:

可参见:http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html

<Context>

  <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"

               maxActive="100" maxIdle="30" maxWait="10000"

               username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"

               url="jdbc:mysql://localhost:3306/javatest"/>

</Context>

 

tomcat JDBC连接池配置示例,自动检查连接的可用性,dbcp定时检测连接,dbcp自动重连的配置

  1. <Resource  
  2. name="jdbc/TestDB"  JNDI数据源的name,查找时用:java:comp/env/jdbc/TestDB  
  3. type="javax.sql.DataSource"  
  4. factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"  
  5. driverClassName="com.mysql.jdbc.Driver" JDBC驱动类  
  6. url="jdbc:mysql://localhost:3306/test?  
  7. characterEncoding=UTF-8&amp;autoReconnectForPools=true&amp;rewriteBatchedStatements=true&amp;useCursorFetch=true&amp;defaultFetchSize=20" 数据库URL地址    
  8. username="xxx" 访问数据库用户名  
  9. password="xxx" 访问数据库的密码  
  10.    
  11. maxWait="3000" 从池中取连接的最大等待时间,单位ms.  
  12. initialSize="10"  初始化连接  
  13. maxIdle="60"   最大空闲连接  
  14. minIdle="10"   最小空闲连接  
  15. maxActive="80" 最大活动连接  
  16.    
  17. validationQuery = "SELECT 1"  验证使用的SQL语句  
  18. testWhileIdle = "true"      指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除.  
  19. testOnBorrow = "false"   借出连接时不要测试,否则很影响性能  
  20. timeBetweenEvictionRunsMillis = "30000"  每30秒运行一次空闲连接回收器  
  21. minEvictableIdleTimeMillis = "1800000"  池中的连接空闲30分钟后被回收  
  22. numTestsPerEvictionRun="10" 在每次空闲连接回收器线程(如果有)运行时检查的连接数量  
  23.       
  24. removeAbandoned="true"  连接泄漏回收参数,当可用连接数少于3个时才执行  
  25. removeAbandonedTimeout="180"  连接泄漏回收参数,180秒,泄露的连接可以被删除的超时值  
  26. />  

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯