无法使用redis导致java内存溢出

无法使用redis导致java内存溢出,第1张

无法使用redis导致java内存溢出的处理方法如下:

1、采用Redis集群,避免单机出现问题。

2、限流,避免同时处理大量的请求。

3、热点缓存失效,可以设置不同的失效时间。

测试环境一个新的服务每一周左右就发触发内存溢出问题。

核心报错信息如下:

新版本修改了org.redisson.client.handler.PingConnectionHandler这个类

旧版会导致:org.redisson.client.handler.CommandsQueue 类里边的Queue<QueueCommandHolder>queue 内存溢出,Queue<QueueCommandHolder>queue这里边放的全是PING

新版本核心变更PingConnectionHandler :

这个在redis执行的命令实际上是 BLPOP 这个质量的官方解释是

take实际转成底层TCP命令就是无限等,但这个情况只是阻塞当前的连接,对于并发的连接不会有阻塞发生,oom出问题也就是当前几个消费的连接无限new导致的,因为对于jvm是两个独立线程 但是对于redis是同一个client或者同一个connection.

1)、springboot2.以后默认使用Lettuce作为 *** 作redis的客户端。它使用netty进行网络通信。

2)、Lettuce的bug导致netty堆外内存溢出-Xmx300m;netty如果没有指定堆外内存,默认使用-Xmx300m

可以通过-Dio.netty.maxDirectMemory进行设置

不能使用-Dio.netty.maxDirectMemory只去调大堆外内存。

1)、升级Lettuce客户端。2)、切换使用jedis


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11651000.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存