记一次redis内存使用满的情况排查

下午突然告警,redis使用率99%。

redis配置如下:双节点4GB。

1、观察redis key分布,如下:

key使用类型主要是string

image-20201027194159345.png

key过期时间分布,看出来主要是0-1小时以及1-3小时的key占了大头

image-20201027194253775.png

看redis大key和key前缀分别占用情况

image-20201027194434919.png

image-20201027194446343.png

在这里差点被误导,以为是ytsmc开头的key导致的,但是仔细分析,结合key前缀和上面的key过期时间分布(ytsmc开头的时间都是几天的),分析出主要是smc开头的key比较多。

注意:由于业务系统key使用的是smc_业务模块_小功能快_xxx这种key,导致分析不出来到底是哪个业务模块的key导致的

猜想:

​ 根据上述证据,可以尝试猜测,key主要是smc前缀,并且主要集中在1-3小时,所以让各个业务方排查下,主要就是优惠券用了小时级别的过期时间,所以推断极大可能是优惠券的。但是证据只能证明必要条件,缺少充分条件,仍需继续分析。

2、联系DBA下载出rdb文件,然后尝试本地load进行分析

将rdb转成json文件,然后结合grep和awk进行分析,命令行如下:参考:点我

# 安装pip3
curl -O https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py

# 安装rdb-tools
pip3 install rdbtools
pip3 install python-lzf

# 转成json
rdb --command json /wjqdata/redis/rdb/dump.rdb > /wjqdata/redis/rdb/dump.json
复制代码

转成的文件就是json形式,如下所示:

"smc_coupon_meet.use.ruleV5_155718_70077_20201026174548_v6":"\\xAC\\xED\u0000\u0005sr\u0000\u0011java.lang.Boolean\\xCD r\\x80\u055c\\xFA\\xEE\u0002\u0000\u0001Z\u0000\u0005valuexp\u0000",
"smc_coupon_meet.use.ruleV5_275130_69147_20201015171100_v6":"\\xAC\\xED\u0000\u0005sr\u0000\u0011java.lang.Boolean\\xCD r\\x80\u055c\\xFA\\xEE\u0002\u0000\u0001Z\u0000\u0005valuexp\u0000",
复制代码

所以通过程序取分析smc_xxx前缀个数,确认到底是哪个业务方导致的,代码如下:


# 读取文件

couponRedisKey = 0
multiRebateRedisKey = 0
singleRebateRedisKey = 0
total = 0

redisKeyFile = open('/Users/beatsangel/Downloads/key.txt', mode='r')
print(redisKeyFile.readable())

line = redisKeyFile.readline()
while line:
    if line.startswith('"smc_coupon') :
        couponRedisKey += 1
    elif line.startswith('"multirebate') :
        multiRebateRedisKey += 1
    elif line.startswith('"singlerebate') :
        singleRebateRedisKey += 1

    total += 1
    line = redisKeyFile.readline()
    
redisKeyFile.close()

print('优惠券key: {} 单返key: {} 累返key: {} total={}'.format(couponRedisKey, singleRebateRedisKey, multiRebateRedisKey, total))


结果:
优惠券key: 5988259 单返key: 0 累返key: 0 total=6042554
复制代码

最终分析出来确实是优惠券业务模块

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享