压测显露堆外内存抖动

原创
小哥 3年前 (2022-11-08) 阅读数 45 #大杂烩

没使用redis当压力测试正常时,为了提高访问率等。redis结果,在压力测量期间出现堆外内存溢出问题。
这些现象如下:

然后使用jvisualvm过来看gc状态,发现老人区、元数据区、伊甸园区、幸存者区都正常,没有内存满。

仔细查看错误信息后,我发现了真正的原因: springboot2.0将来默认使用lettuce作为操作redis客户端,它使用netty网络通信。netty底层正在计算自己。如果数量超过默认容量限制,将引发异常。这是堆外溢出异常。netty操作将减少内存使用后,内存使用的统计信息必须是lettcure客户端,在该操作中,没有及时调用内存,导致堆外内存溢出

查看报告错误的源代码,可以看到引发异常的代码:

真相已经出来了。

有两种方法可以解决这个问题,使用更高版本。lettuce,或切换到使用jedis。(直接调整堆外内存的方法只是暂时缓解,它迟早会满的。)

使用jedis记得之前屏蔽data-redis内携带的lettuce依赖,jedis版本不需要命名,springboot有相关版本

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

热门