Redis 资源告警排查记录

背景:有一套小redis集群,已经n长时间没有管过了,几百G内存不够用了,运维中心频繁资源告警,为了不影响应用正常使用,所以有了这次排查的过程。

redis-rdb-tools 安装

环境:Python 2.7

  1. python redis :https://pypi.python.org/packages/source/r/redis/redis-2.8.0.tar.gz

    tar -zxvf  redis-2.8.0.tar.gz
    cd redis-2.8.0/
    python2.7 setup.py  install
    
  2. python-lzf:https://pypi.org/project/python-lzf/

    tar -zxvf  python-lzf-0.2.4.tar.gz
    cd python-lzf-0.2.4/
    python2.7 setup.py  install
    
  3. redis-rdb-tools:https://github.com/sripathikrishnan/redis-rdb-tools

    # clone到本地以后打zip包
    unzip  redis-rdb-tools.zip
    cd redis-rdb-tools/
    python2.7 setup.py  install
    

计算KEY的数量

sh count-key.sh key*

单节点key的数量

# ! bin/bash

password="你的redis密码"
redis_home=/usr/local/bin
usage() {
  echo "Usage: count.sh <redis_key>"
  exit 0
}

if [ ! -n "$1" ] ;then
   usage
else
  for ip in 3 4 5 6 7 8 ;do  
     data_size=$($redis_home/redis-cli -h 0.0.0.$ip -p 6379 -c -a $password --scan --pattern "$1" | wc -l)
   echo "0.0.0.$ip is key [$1] size:$data_size"
  done
fi

0.0.0.$ip 需要改成你自己的ip和范围,太多自己优化一下写法,再套一层

所有节点key的总数量

# ! bin/bash

password="你的redis密码"
redis_home=/usr/local/bin
n=0
usage() {
  echo "Usage: ttl.sh <redis_key>"
  exit 0
}
if [ ! -n "$1" ] ;then
   usage
else
  for ip in 3 4 5 6 7 8 ;do
     data_size=$($redis_home/redis-cli -h 0.0.0.$ip -p 6379 -c -a $password --scan --pattern "$1" | wc -l)
     n=$((${n} + $data_size))
  done
fi
echo "key [$1] total size:$n"

分析db文件计算某个key在单节点内存占用

rdb  -c memory  -k  "keys*"  >>  /tmp/file.csv

# 分析出的csv第四列为单个key的大小bytes
cat /tmp/file.csv  |awk -F"," '{sum +=$4};END{print sum }'

以上就是本次一个简单的排查分析,最终已经定位到了过大的key,现已经迁移到了新环境

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值