栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

一次解决 Could not get a resource from the pool 问题的经历

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

一次解决 Could not get a resource from the pool 问题的经历

背景

近期,有用户反馈在使用系统的时候经常报错,具体后台报错信息如下图:


通过图中的报错信息,我们可以判断:应该是无法从池里获取连接了。

可是,一直都运行的好好的,怎么突然就不能获取连接了呢?

解决

首先,我们先排除掉「密码错误」的可能性。因为如果是密码错误的话,那从开始的时候就不可能正常运行的。

然后,考虑到本身业务场景不存在同一时刻产生大量并发子占满所有连接的情况,所以也排除掉了大并发造成等待超时的情况。

经查,服务重启后,该问题就消失了,但是运行一段儿时间后,问题又再度出现。由此猜测,是不是业务使用过的 redis 连接一直没有释放掉(即使业务完成了也没有释放掉!),致使池中的资源在系统运行一段时间后被耗尽,这样就导致了之后的业务请求无资源(redis连接)可用。

回头检查下 redis 连接池的相关配置,如下图:

啊哦!看我们发现了什么!enableTransactionSupport 为 true。

这里引入一个知识点:

RedisTemplate 配置 enableTransactionSupport 为 true(开启事务)时,连接不会自动释放!!!!

之后,为了稳妥起见又回头确认了下相关业务代码是不是真的用到了 redis 事务,结果是并没有 。

果断将 enableTransactionSupport 设置为 false,或直接删除该配置,因为 enableTransactionSupport 默认为 false,如下图:


重启服务,运行一段时间后,问题没有再次出现过了~~ 

总结

此次问题产生的主要原因是,「开发Boy」直接从别的地方 copy 了一份 redis 的相关配置,但对于配置中的参数是不是适合当前这个项目,并没有很认真的检查过。

给我们的提示是:" copy 有风险,要留心检查 ",拿不准的配置项还是要 搞清楚了再用。否则,就是在给未来挖一个大 坑。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/933082.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号