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
    

      

  • 相关阅读:
    bzoj 1017 魔兽地图DotR
    poj 1322 chocolate
    bzoj 1045 糖果传递
    poj 3067 japan
    timus 1109 Conference(二分图匹配)
    URAL 1205 By the Underground or by Foot?(SPFA)
    URAL 1242 Werewolf(DFS)
    timus 1033 Labyrinth(BFS)
    URAL 1208 Legendary Teams Contest(DFS)
    URAL 1930 Ivan's Car(BFS)
  • 原文地址:https://www.cnblogs.com/topicjie/p/7665663.html
Copyright © 2011-2022 走看看