zoukankan      html  css  js  c++  java
  • redisCheckMem脚本

    最近维护的redis cluster需要扫描每个实例的内存使用率,首先我们需要获取实例已经使用的内存,获取实例的最大内存配额,两个值相比就能获取到内存使用比例。

    实例的最大内存获取方法: 

    $REDIS_CLI -h $host -p $port config get maxmemory|tail -1|awk '{printf "%.4f
    ", ($1 / 1024 /1024 /1024)}'

    实例的已使用内存获取方法:

    $REDIS_CLI -h $host -p $port info memory|awk -F : '/used_memory:/ {printf "%.4f
    ", ($2 /1024/1024/1024)}'

    获取到的值单位是字节,我们需要更换成G为了更方便的直观的读取。

    最后使用已经使用的内存除以最大的内存就是内存使用的比例,如果超过90%则报警,会进行内存的扩容或数据的清理操作。

    实例动态扩容内存的方法: 

    # 计算方法 , 例如要分配25G  则: 25*1024*1024*1024 = 26843545600
    config set maxmemory 26843545600
    

      

    因为集群有太多的redis实例,我写了一个扫描的脚本:

    [root@xxx]# cat kv2HostList
    192.0.171.150
    192.0.171.152
    192.0.171.153
    192.0.171.155
    192.0.171.156
    192.0.171.158
    192.0.171.159
    192.0.171.160
    

      

    #!/bin/bash
    ###########################################
    #
    # 检查KV集群里面每个实例的内存使用入库
    #
    ###########################################
    STARTPORT=8381
    ENDPORT=8400
    WORKDIR="/software/scripts/redisCheckMem"
    REDIS_HOST_FILE="$WORKDIR/kv2HostList"
    REDIS_CLI='/data/redisApp/bin/redis-cli'
    TMP_DB_FILE="$WORKDIR/DBfile.txt"
    # 定义内存使用比例的阀值
    W_NUM='90'
    # Define color
    red() {
      echo -e "33[31m $1 33[0m"
    }
    green() {
      echo -e "33[32m $1 33[0m"
    }
    yellow() {
      echo -e "33[33m $1 33[0m"
    }
    AutoCheck() {
        datetime=`date +%Y%m%d%H`
        >$TMP_DB_FILE
        for host in `cat $REDIS_HOST_FILE`
            do
               echo "------------------------------------------------"
               for port in `seq $STARTPORT $ENDPORT`
                do
                Max_mem=$($REDIS_CLI -h $host -p $port config get maxmemory|tail -1|awk '{printf "%.4f
    ", ($1 / 1024 /1024 /1024)}')
                Used_mem=$($REDIS_CLI -h $host -p $port info memory|awk -F : '/used_memory:/ {printf "%.4f
    ", ($2 /1024/1024/1024)}')
                P_used_mem=$(awk "BEGIN{print $Used_mem/$Max_mem*100 }")
                yellow "Server:[$host:$port] MemoryInfo : "
                echo -e "	 Max_memory: $Max_mem G"
                echo -e "	 Used_memory: $Used_mem G"
                num=$(echo $P_used_mem|awk -F . '{print $1}')
                if [[ $num -gt $W_NUM ]];then
                    red "	 Percentage used: $P_used_mem"
                    red "	 Warring: 内存使用率过高,请关注!!!"
                else
                    green "	 Percentage used: $P_used_mem"
                fi
                echo -n "insert into bdcsc2_clustermonitor_kv (date,ip,port,mem_use,kv) values " >> $TMP_DB_FILE
                echo "('$datetime','$host','$port','$Used_mem','kv2');" >> $TMP_DB_FILE
                sleep 0.5
            done
        done
    }
    Report2db() {
    mysql -h192.168.0.47 -uroot -xxx-D report < $TMP_DB_FILE
    }
    case "$1" in
    check)
            AutoCheck
            ;;
    report2db)
            AutoCheck
            Report2db
            ;;
    *)
            echo "Usage: $0 {check | report2db}"
    esac
    

      

  • 相关阅读:
    依赖查找与依赖注入
    实时插入排序算法
    Phantomjs实现后端将URL转换为图片
    唯一约束 UNIQUE KEY
    基于队列模型编写一个入岗检查站
    通过实例深入理解监听器
    函数式接口
    Linux学习6-安装Python3.6
    Jenkins构建项目后发送钉钉消息推送
    Docker学习之安装tomcat环境
  • 原文地址:https://www.cnblogs.com/topicjie/p/7665663.html
Copyright © 2011-2022 走看看