下午突然告警,redis使用率99%。
redis配置如下:双节点4GB。
1、观察redis key分布,如下:
key使用类型主要是string
key过期时间分布,看出来主要是0-1小时
以及1-3小时
的key占了大头
看redis大key和key前缀分别占用情况
在这里差点被误导,以为是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