✅P154_缓存-缓存使用-压力测试出的内存泄漏及解决
大约 1 分钟
堆外内存溢出
压测三级分类
出现问题:使用data-redis-starter
出现堆外内存溢出即OutOfDireMemoryError
原因:
- lettuce使用netty作为网络通信框架,netty默认使用
-Xmx300m
作为堆外内存大小,调大Xmx 的大小只能延缓堆外内存溢出的时间,但是一定会出现异常,也不能通过设置-Dio.netty.maxDirectMemory
调整堆外内存的大小 - 注:SpringBoot2.3.7版本已经针对lettuce进行了优化,未出现堆外内存溢出的现象
解决方案
- 升级lettuce客户端
- 切换使用jedis,解决堆外内存溢出
lettuce、jedis都是操作redis的客户端,SpringBoot会再次封装RedisTemplate
排除lettuce依赖
引入redis,cfmall-product/pom.xml
<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>
导入jedis
使用jedis客户端操控redis,cfmall-product/pom.xml
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
测试
再次按上方步骤进行测试即可,正常情况下不会发生错误