作者:媛涞汝茨 | 来源:互联网 | 2023-06-06 15:36
背景
在往消息系统发送消息,写入redis的时候,出现redis内存飙升的情况,原来redis服务器的内存是16G,占用约8G,后面通过补推业务数据造成了占用到90%的内存。紧急把服务器内存升级到32G,再继续补推数据,内存飙升的情况还继续,在一两个小时内又飙升到92%左右。
排查过程
用上重启大法
分别重启了redis的从库,主库,都没用。这个方案pass。
是否有内存碎片?
怀疑是频繁修改redis里值过大的key引起的,后来在测试环境对某个有6千多个值的key进行修改1万次,观察redis占用内存的变化,结果是变化不大。另外,根据redis的几个内存相关参数看到redis内存碎片也正常。这个原因又被pass。
寻找占用内存过高的key
目标是想利用某些工具分析出redis里哪些key的值占用内存最多,并且按占用大小做倒序,根据key的业务值去排查是否正常。最后运维通过下面的工具拿到redis的大key,发现是系统设计的问题,有很多大key已经不再使用,但是并没有在redis里删除,引起了这个问题。最终通过删除相关的key把redis内存降低到6.5G左右。
获取redis大key的方法详见:https://yq.aliyun.com/articles/117042