Springboot操作Redis 报错“OutOfDirectMemoryError(堆外内存溢出) ”问题
当进行压力测试时后期后出现堆外内存溢出OutOfDirectMemoryError新版本的Springboot的针对lettuce做了相关优化,在本人测试的时候使用lettuce未出现OutOfDirectMemoryError等BUG1,Springboot2.0以后默认使用lettuce作为操作redis的客户端,它使用netty进行网络通信2,lettuce的bug导致netty堆外内存溢出
·
Redis堆外内存溢出(OutOfDirectMemoryError)
当进行压力测试时后期后出现堆外内存溢出OutOfDirectMemoryError
新版本的Springboot的针对lettuce做了相关优化,在本人测试的时候使用lettuce未出现OutOfDirectMemoryError等BUG
产生原因
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {
1,Springboot2.0以后默认使用lettuce作为操作redis的客户端,它使用netty进行网络通信
2,lettuce的bug导致netty堆外内存溢出,netty如果没有指定堆外内存,默认使用虚拟机的-Xms的值,可以使用-Dio.netty.maxDirectMemory进行设置
解决方案
由于是lettuce的bug造成,不能直接使用-Dio.netty.maxDirectMemory去调大虚拟机堆外内存,时间久了堆外内存溢出问题肯定还会出现,治标不治本。
解决方案:切换使用Jedis,先排除lettuce的核心包,使用jedis
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
堆外内存溢出OutOfDirectMemoryError,完美解决
更多推荐
已为社区贡献16条内容
所有评论(0)