工作中遇见redis内存突增2G,一段时间之后又突然释放1G,这个时间段内qps正常,没有大数据写入,其他各项正常。
问题原因,redis内部维护了一个数组字典,存储key指向的内存位置(类似HashMap的容量)。当redis的元素=数组字典的长度时,就会扩容。扩容过程是,首先申请2倍当前长度的空间,然后渐进式hash把旧字典的数据拷贝到新字典去,拷贝完成释放旧字典空间。
字典存储的是指针,每个指针占用8个字节,当key的数量达到134217728时(1.3亿),此时134217728*8字节=1GB,就会导致先申请2GB,再释放1GB。
另外需要注意的是,redis的过期时间也是一个单独的字典维护,当有过期时间的key达到1.3亿时,也有突增2GB的现象。
参考文章:
https://www.cnblogs.com/ourroad/p/4891648.html 渐进式hash说明
https://www.cnblogs.com/meituantech/p/9376472.html 比较详细的介绍了rehash
关键字: redis内存突增 内存突增1GB 内存突增2GB
来源:oschina
链接:https://my.oschina.net/u/4193646/blog/3105308