当前位置: 首页 > news >正文

redisCheckMem脚本

最近维护的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

  

 

转载于:https://www.cnblogs.com/topicjie/p/7665663.html

相关文章:

  • 搜索引擎技术之概要预览
  • 从BLOG到电子书——把wordpress备份的WXR转为epub
  • 【数据结构栈和队列】之十队列顺序存储结构
  • ORA-00980: synonym translation is no longer valid, version 9
  • [原创] css中的绝对定位和相对定位
  • 页面触底自动加载数据
  • SSL配置及练习
  • 从上百幅架构图中学得半点大型网站建设经验(上)
  • jquery选择器
  • 深切悼念苹果的老大乔布斯
  • css理论
  • windwos7 em控制台使用操作系统用户错误
  • angular4.0如何引入外部插件1:import方案
  • Thinking in React Implemented by Reagent
  • Streams复制文档
  • JavaScript 如何正确处理 Unicode 编码问题!
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • @jsonView过滤属性
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • emacs初体验
  • HTTP 简介
  • laravel with 查询列表限制条数
  • linux学习笔记
  • Mybatis初体验
  • nginx 配置多 域名 + 多 https
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 前端_面试
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 深度学习在携程攻略社区的应用
  • 问题之ssh中Host key verification failed的解决
  • 线性表及其算法(java实现)
  • 新书推荐|Windows黑客编程技术详解
  • 学习使用ExpressJS 4.0中的新Router
  • ![CDATA[ ]] 是什么东东
  • #mysql 8.0 踩坑日记
  • $.ajax()参数及用法
  • (33)STM32——485实验笔记
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (七)c52学习之旅-中断
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转载)利用webkit抓取动态网页和链接
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .Net 4.0并行库实用性演练
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET6实现破解Modbus poll点表配置文件
  • /etc/shadow字段详解
  • :=
  • @ComponentScan比较
  • @WebServiceClient注解,wsdlLocation 可配置