✅P154_缓存-缓存使用-压力测试出的内存泄漏及解决

gong_yz大约 1 分钟谷粒商城

堆外内存溢出

压测三级分类

出现问题:使用data-redis-starter出现堆外内存溢出即OutOfDireMemoryError

原因

  • lettuce使用netty作为网络通信框架,netty默认使用-Xmx300m作为堆外内存大小,调大Xmx 的大小只能延缓堆外内存溢出的时间,但是一定会出现异常,也不能通过设置-Dio.netty.maxDirectMemory调整堆外内存的大小
  • 注:SpringBoot2.3.7版本已经针对lettuce进行了优化,未出现堆外内存溢出的现象

解决方案

  1. 升级lettuce客户端
  2. 切换使用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>

测试

再次按上方步骤进行测试即可,正常情况下不会发生错误