我们用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
如果你的Druid数据源配置中,maxActive和配置文件中的不匹配,并且每隔30秒会报错,主要可能是:
Druid和配置文件的值不一致
Druid的数据源初始化默认会读取应用配置文件(application.properties)中的相关参数。
但是如果DruidDataSource中显式指定了maxActive值,就会与配置文件不一致。
Druid连接池清理线程工作频率为30秒
Druid连接池内置的连接清理线程的工作频率默认为30秒。
每隔30秒会判断连接池中的active连接数和maxActive值的关系。
报 TooManyConnections异常
如果连接数超过maxActive限制,就会在Druid连接清理线程工作时报TooManyConnections异常。
根据您提供的信息,问题似乎与数据库连接池中的连接获取超时有关。报错提示是com.alibaba.druid.pool.GetConnectionTimeoutException
,说明在获取数据库连接时等待的时间超过了指定的超时时间。
这个问题可能出现在一台服务器上,而另一台服务器正常工作。您已经确认数据源配置与配置文件中的设置相符,并尝试使用Spring Boot和Tomcat两种方式启动应用程序,但问题仍然存在。
鉴于这些尝试的结果,建议您检查以下几个方面来排除问题:
服务器资源限制:确保每台服务器的硬件资源(CPU、内存)足够支持所需的并发数据库连接数。如果其中一台服务器的资源不足,可能会导致连接池无法满足请求,从而出现获取连接超时的错误。
网络连接:检查受影响服务器的网络连接是否稳定。连接到数据库的网络通信中断或不稳定可能导致获取连接失败。
数据库配置:确保数据库服务器的最大连接数和连接超时等参数与应用程序的配置一致。如果数据库服务器的最大连接数小于连接池的最大活跃连接数,可能会导致连接池无法获取足够的连接,从而引发超时异常。
如果以上步骤都没有解决问题,您可以考虑以下进一步的调查:
希望这些建议能帮助您解决问题。如果问题仍然存在,请提供更多详细的日志或上下文信息,以便我们能够提供更准确的帮助。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。