OutofDirectMemoryError堆外内存溢出
原因:
- spring boot2.0之后默认使用lettuce作为操作redis的客户端,它是使用netty进行网络通信。
- lettuce的bug导致netty堆外内存溢出 -Xmx300m netty如果没有设置堆外内存,默认使用 -Xmx300m
- 可以通过Dio.netty.maxDirectMemory进行设置
解决方案:
- 不能只取调大Dio.netty.maxDirectMemory内存,只是延缓,并不能得到解决
- 升级lettuce客户端(修改源码)吞吐量大,且实时更新
- 切换使用jedis客户端。依赖排除lettuce,然后导入jedis(无需版本,spring boot以来中有jedis版本可以查看),更新慢