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
    

      

  • 相关阅读:
    angular组件开发
    APICloud案例源码、模块源码、考试源码、开发工具大集合!赶快收藏
    Vue-router实现单页面应用在没有登录情况下,自动跳转到登录页面
    原生js实现架子鼓特效
    A Beginner’s Introduction to CSS Animation中文版
    react开发教程(三)组件的构建
    体验javascript之美第五课 五分钟彻底明白 匿名函数自执行和闭包
    这些例子很炫,感兴趣的童鞋可以了解一下
    体验javascript之美6:如果你觉得什么都会了或者不知道js学什么了看这里-面向对象编程
    傅里叶变换,小波变换,EMD,HHT,VMD(经典和现代信号处理方法基本原理概念)
  • 原文地址:https://www.cnblogs.com/topicjie/p/7665663.html
Copyright © 2011-2022 走看看