码迷,mamicode.com
首页 > 其他好文 > 详细

redisCheckMem脚本

时间:2017-10-14 11:42:16      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:for   efi   end   roo   cli   sql   info   color   stl   

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

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

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

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

$REDIS_CLI -h $host -p $port info memory|awk -F : ‘/used_memory:/ {printf "%.4f\n", ($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 "\033[31m $1 \033[0m"
}
green() {
  echo -e "\033[32m $1 \033[0m"
}
yellow() {
  echo -e "\033[33m $1 \033[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\n", ($1 / 1024 /1024 /1024)}‘)
            Used_mem=$($REDIS_CLI -h $host -p $port info memory|awk -F : ‘/used_memory:/ {printf "%.4f\n", ($2 /1024/1024/1024)}‘)
            P_used_mem=$(awk "BEGIN{print $Used_mem/$Max_mem*100 }")
            yellow "Server:[$host:$port] MemoryInfo : "
            echo -e "\t Max_memory: $Max_mem G"
            echo -e "\t Used_memory: $Used_mem G"
            num=$(echo $P_used_mem|awk -F . ‘{print $1}‘)
            if [[ $num -gt $W_NUM ]];then
                red "\t Percentage used: $P_used_mem"
                red "\t Warring: 内存使用率过高,请关注!!!"
            else
                green "\t 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

  

 

redisCheckMem脚本

标签:for   efi   end   roo   cli   sql   info   color   stl   

原文地址:http://www.cnblogs.com/topicjie/p/7665663.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!