开发者社区> 问答> 正文

maxActive和配置文件的不对应,每过30秒会报错

我们用zookeeper注册了两个后台链接数据库的节点,一台服务器是好的,但是另一台服务器每隔30s会报50次错.报错内容如下: Caused by: com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60000, active 50, maxActive 50, creating 0, .........

使用web页面进行监控,查看数据源跟我们配置文件的是一样的,先后用springboot的方式和tomcat的方式启动,都会有这个错误,数据库连接归还都是自动归还,druid版本1.1.10

配置文件如下

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.druid.initial-size=5 spring.datasource.druid.min-idle=5 spring.datasource.druid.maxActive=25 spring.datasource.druid.maxWait=60000 spring.datasource.druid.timeBetweenEvictionRunsMillis=60000 spring.datasource.druid.minEvictableIdleTimeMillis=90000 spring.datasource.druid.keep-alive=true spring.datasource.druid.remove-abandoned-timeout=90 spring.datasource.druid.remove-abandoned=true spring.datasource.druid.log-abandoned=true spring.datasource.druid.validationQuery=SELECT 1 FROM DUAL spring.datasource.druid.testWhileIdle=true spring.datasource.druid.testOnBorrow=false spring.datasource.druid.testOnReturn=false spring.datasource.druid.poolPreparedStatements=true spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=100 spring.datasource.druid.filter.stat.merge-sql=false spring.datasource.druid.web-stat-filter.enabled=true spring.datasource.druid.web-stat-filter.url-pattern=/* spring.datasource.druid.web-stat-filter.exclusions=.js,.gif,.jpg,.bmp,.png,.css,.ico,/druid/ spring.datasource.druid.stat-view-servlet.url-pattern=/druid/* spring.datasource.druid.stat-view-servlet.allow= spring.datasource.druid.stat-view-servlet.deny= spring.datasource.druid.stat-view-servlet.reset-enable=true spring.datasource.druid.stat-view-servlet.login-username=admin spring.datasource.druid.stat-view-servlet.login-password=123456 spring.datasource.druid.filter.wall.config.strict-syntax-check=false

原提问者GitHub用户AttackingCat

展开
收起
山海行 2023-07-05 19:19:24 228 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    如果你的Druid数据源配置中,maxActive和配置文件中的不匹配,并且每隔30秒会报错,主要可能是:

    Druid和配置文件的值不一致
    Druid的数据源初始化默认会读取应用配置文件(application.properties)中的相关参数。

    但是如果DruidDataSource中显式指定了maxActive值,就会与配置文件不一致。

    Druid连接池清理线程工作频率为30秒
    Druid连接池内置的连接清理线程的工作频率默认为30秒。

    每隔30秒会判断连接池中的active连接数和maxActive值的关系。

    报 TooManyConnections异常
    如果连接数超过maxActive限制,就会在Druid连接清理线程工作时报TooManyConnections异常。

    2023-07-30 19:25:25
    赞同 展开评论 打赏
  • 建议你尝试1.1.23版本

    原回答者GitHub用户diaodiaofly

    2023-07-06 10:51:45
    赞同 展开评论 打赏
  • 根据您提供的信息,问题似乎与数据库连接池中的连接获取超时有关。报错提示是com.alibaba.druid.pool.GetConnectionTimeoutException,说明在获取数据库连接时等待的时间超过了指定的超时时间。

    这个问题可能出现在一台服务器上,而另一台服务器正常工作。您已经确认数据源配置与配置文件中的设置相符,并尝试使用Spring Boot和Tomcat两种方式启动应用程序,但问题仍然存在。

    鉴于这些尝试的结果,建议您检查以下几个方面来排除问题:

    1. 服务器资源限制:确保每台服务器的硬件资源(CPU、内存)足够支持所需的并发数据库连接数。如果其中一台服务器的资源不足,可能会导致连接池无法满足请求,从而出现获取连接超时的错误。

    2. 网络连接:检查受影响服务器的网络连接是否稳定。连接到数据库的网络通信中断或不稳定可能导致获取连接失败。

    3. 数据库配置:确保数据库服务器的最大连接数和连接超时等参数与应用程序的配置一致。如果数据库服务器的最大连接数小于连接池的最大活跃连接数,可能会导致连接池无法获取足够的连接,从而引发超时异常。

    如果以上步骤都没有解决问题,您可以考虑以下进一步的调查:

    • 检查服务器的日志文件,特别是数据库服务器和应用程序服务器的日志,以获取更多关于错误的详细信息。
    • 尝试使用其他数据库连接池,或者更新Druid连接池到最新版本,以查看是否能够解决问题。

    希望这些建议能帮助您解决问题。如果问题仍然存在,请提供更多详细的日志或上下文信息,以便我们能够提供更准确的帮助。

    2023-07-05 19:34:52
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载