标签: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
标签:for efi end roo cli sql info color stl
原文地址:http://www.cnblogs.com/topicjie/p/7665663.html