zoukankan      html  css  js  c++  java
  • DBCP连接池使用问题

    问题现象:

    启动应用,访问无压力,一切正常,一段时间过后,应用访问异常。

    问题分析:

    1、web容器线程爆满,拒绝服务。由于应用并发量大,线程响应时间长增加,线程池连接数逐步递增直到爆满,导致应用拒绝服务。

    2、通过对线程信息的分析,发现线程处理时间都卡在连接数据库中,通过对数据库服务器的检查,数据库是没有问题的。

    3、通过查询服务器日志,发现数据库连接异常:连接超时。

    4、查询DBCP连接池连接使用情况,空闲链接和使用链接还正常。

    问题思考:

    从以上信息可以确认,问题一定出在应用层,并且是应用连接数据库之间,但为什么连接池还有正常链接,但是连接不上?而项目已启动时正常进行的,但运行一段时间,却报出数据库连接超时异常信息。线程时间就是消耗在等待数据库连接的过程。连接池还没达到最大连接数,空闲连接还有,但为什么连接不上呢?

    解决问题:

    带着以上疑问,反复查看了连接池的配置文件信息,是否配置问题,几个配置信息给了我灵感,带着这个思绪继续重演问题发生的过程和对日志的观察,终于发现了问题所在,就是数据库连接池的空闲链接超时。但连接池并没有立刻回收,当有新的请求进来就继续分配连接池中的空闲链接,但连接池并没有验证链接的有效性,所以线程就出现了等待超时的一个过程。

    解决方案:

    1、配置借链接要求连接池检测此链接有效性:testOnBorrow

    2、配置还链接要求连接池检测此链接有效性:testOnReturn

    3、配置要求连接池定时检测空闲链接有效性:testWhileIdle

  • 相关阅读:
    思考问题的方法
    专注于工作以及工作相关的技术
    优化的思想
    Web开发基础之问 20130505
    外企一线开发经理的核心竞争力
    你说的话算不算数?
    不抱怨的世界
    欲立庙堂,先立栋梁
    ASP.NET 高级程序设计学习笔记 20130505
    function在forn表单中方法报错的解决方法
  • 原文地址:https://www.cnblogs.com/zhangyingai/p/7087410.html
Copyright © 2011-2022 走看看