redis报错Could not get a resource from the pool(附代码)(4)

在使用Spring Boot集成Redis后遇到'Could not get a resource from the pool'异常,排查包括Redis服务状态、防火墙、配置、连接释放等常见问题。尝试调整配置、增加依赖、检查sysctl参数vm.overcommit_memory,以及确保资源正确释放,最终发现是try-catch-finally结构中getJedis方法未包含在try块内导致连接异常未释放,修正后问题解决。
摘要由CSDN通过智能技术生成

按照前面springMVC集成redis(1)、(2)(3)等3篇博文,在使用了几天后,会抛出“Could not get a resource from the pool”的异常,网上各种查资料,按照网上说的方法几乎都尝试了,但就是没有解决问题,这个问题被困扰了好久。最后得以解决,特总结如下:
上网查询原因,大多数报错的原因如下:

1、确保redis服务是否正常启动。

2.由于防火墙原因无法连接到Redis;确保redis所在的ip网络畅通,端口开放。

3.IP地址或端口错误

4.Jedis 对象用完以后,要释放掉,不让会一直占用,所以会出现无法获取新的资源。

5.Spring Boot项目,缺少依赖

如果使用Redis与Spring Boot,也会抛出此异常。
如果你使用的是Spring Boot,那么Redis的依赖是不够的,
您还需要从redis.io手动下载并安装Redis,并运行redis,您需要在使用Redis的所有应用程序中添加相关行:
application.properties:
spring.redis.host:
spring.redis.port: <端口>
6.vm.overcommit_memory = 0,fork失败

使用redis-cli,执行ping命令,异常信息出来了:
(error)MISCONF Redis is configured to save RDB snapshots, but is currently
not able to persist on disk. Commands that may modify the data set
are disabled. Please check Redis logs for details about the error.
然后查看redis日志,出现了
WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ‘vm.overcommit_memory = 1’ to /etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1’ for this to take effect.
问题已经很清晰了,bgsave会fork一个子进程,因为vm.overcommit_memory = 0,所以申请的内存大小和父进程的一样,由于redis已经使用了60%的内存空间,所以fork失败
解决办法:
/etc/sysctl.conf 添加 vm.overcommit_memory=1
sysctl  vm.overcommit_memory=1

7.当jed

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值