详细错误信息:Caused by: io.netty.util.internal.OutOfDirectMemoryError: failed to allocate 901775360 byte(s) of direct memory (used: 964689920, max: 1860698112)
spring-boot-starter-data-redis 默认使用了lettuce,lettuce使用 netty进行网络通信,lettuce 的bug导致netty堆外内存溢出,解决办法 改为使用jedis,具体操作如下
一、在pom.xml中排除lettuce包并添加jedis的依赖
<!-- redis conf -->
<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>
<version>2.9.0</version>
</dependency>
二、修改配置文件,将lettuce替换为jedis
1、修改前使用lettuce
spring:
redis:
host: 127.0.0.1
port: 6379
#password: 123456
#连接超时时间(毫秒)
timeout: 10000
# Redis默认情况下有16个分片,这里配置具体使用的分片
database: 5
lettuce:
pool:
# 连接池最大连接数(使用负值表示没有限制) 默认 8
max-active: 8
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
max-wait: -1
# 连接池中的最大空闲连接 默认 8
max-idle: 8
# 连接池中的最小空闲连接 默认 0
min-idle: 0
2、修改后使用jedis
spring:
redis:
host: 127.0.0.1
port: 6379
#password: 123456
#连接超时时间(毫秒)
timeout: 10000
# Redis默认情况下有16个分片,这里配置具体使用的分片
database: 5
jedis:
pool:
# 连接池最大连接数(使用负值表示没有限制) 默认 8
max-active: 8
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
max-wait: -1
# 连接池中的最大空闲连接 默认 8
max-idle: 8
# 连接池中的最小空闲连接 默认 0
min-idle: 0