1、对使用redis的接口进行了压测,发现产生了OutofDirectMemoryError
2、产生对外内存溢出的原因
springboot2.0以后默认使用lettuce作为操作redis的客户端,它使用netty进行网络通讯
lettuce的bug导致netty堆外内存溢出,没有进行内存释放
-Xmx330m:netty如果没有指定堆外内存,默认使用-Xmx330m
可以通过-Dio.netty.maxDirectMemory进行设置
3、解决方案
不能使用-Dio.netty.maxDirectMemory只是调大堆外内存
方式一:
升级lettuce客户端
方式二:
切换使用jedis
lettuce和jedis操作redis底层客户端,Spring再次封装redisTemplate