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

    问题现象:

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

    问题分析:

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

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

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

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

    问题思考:

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

    解决问题:

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

    解决方案:

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

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

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

  • 相关阅读:
    【math】共线性的影响分析
    【colab】挂载google网盘
    【ML】非均衡样本处理
    phpwind < v6 版本命令执行漏洞
    Uc爆破工具
    shodan:黑客搜索引擎
    webshell下执行命令脚本汇集
    Android利用Fiddler进行网络数据抓包
    150个在线代理站点
    PHP filesystem attack vectors
  • 原文地址:https://www.cnblogs.com/zhangyingai/p/7087410.html
Copyright © 2011-2022 走看看