Redisson导致Redis连接池用尽的问题
来源:16-6 Redisson分布式锁实战-3:Debug调试及锁讲解
KD里的傻气
2018-04-20
老师您好,我遇到下面这个问题,麻烦您百忙中帮我看看
我在阿里云上弄了两个服务器A和B
服务器A为主服务器,安装了Nginx、1个Tomcat、MySQL、2个Redis(分别为6379端口和6380端口)
服务器B为从服务器,安装了1个Tomcat
按照课程最后布署上云的配置,使用了RedisShardedPoolUtil实现对Redis访问,定时关单任务CloseOrderTask.java中也使用的RedisShardedPoolUtil这种方式实现对分布式锁的控制,但是在CloseOrderTask.java中,仅是将使用Redisson控制分布式锁实现定时关单的@Schedulled注释掉了,函数主体和注入的RedissonManager部分都没有注释掉。
在云服务器中布署时,先布署了服务器A,通过ip访问了index.jsp正常,接着布署服务器B,通过ip访问index.jsp也正常,随后再访问服务器的index.jsp发现无响应。
于是调阅了服务器A的输出日志mmall_error.log,截取如下(附在末尾了)
看意思似乎是因为Redisson初始化时,无法从Redis连接池中获取连接,导致初始化失败。
项目中只有在定时关单CloseOrderTask.java中使用了Redisson,而我已将使用Redisson控制分布式锁的定时任务关了,但是没有注释掉代码,也没有释注掉注入的RedissonManager,于是我将代码中的使用Redisson控制分布式锁的函数整体注释掉,同时将@Autowired RedissonManager也一并注释掉后,重新在服务器AB上发布,就正常了。
我想问的是,是否是因为使用Redisson控制分布式锁这部分您只是想做个演示,RedissonManager的代码并不完整,没有实现释放Redis连接的功能,导致了定时关单启动后虽然没有使用Redisson,但是还是作了连接,却没有释放,引导起Redis连接池用尽的问题?
2回答
-
Geely
2018-04-22
hi 同学,这几天家里有点事情忙,忙着照顾媳妇坐月子,刚倒出点时间来,回复晚啦,在QQ群里和大家说啦,还请海涵呀,谢谢理解。接着说这个问题哈
我仔细看了日志,无法初始化足够的连接~~
首先明确一个redisson默认是自动释放连接的。
代码里我还没看到你的代码,不知道会不会导致重复初始化,一旦发生重复初始化就会出现这种问题。
因为我们用的代码,同学可以尝试迁移到spring来管理redisson的方式,还能避免这种情况。
另外redis server上可以配置连接数等数据,不知道是不是连接数配置不够,如果确定够的话,那目前推测是有重复初始化占用连接的情况。可以进一步排查一下~~
看了你的问题,我要给你非常非常大的赞!描述的非常清楚,截图也有,而且自己做了尝试的步骤也写的很清楚!!赞一个!前途不可限量!
00 -
KD里的傻气
提问者
2018-04-20
日志太长了,只好截图发上来
00
相似问题