最近维护的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脚本的更多相关文章

  1. Apache执行Python脚本

    由于经常需要到服务器上执行些命令,有些命令懒得敲,就准备写点脚本直接浏览器调用就好了,比如这样: 因为线上有现成的Apache,就直接放它里面了,当然访问安全要设置,我似乎别的随笔里写了安全问题,这里 ...

  2. SQL Server镜像自动生成脚本

    SQL Server镜像自动生成脚本 镜像的搭建非常繁琐,花了一点时间写了这个脚本,方便大家搭建镜像 执行完这个镜像脚本之后,最好在每台机器都绑定一下hosts文件,不然的话,镜像可能会不work 1 ...

  3. 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)

    分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...

  4. 探真无阻塞加载javascript脚本技术,我们会发现很多意想不到的秘密

    下面的图片是我使用firefox和chrome浏览百度首页时候记录的http请求 下面是firefox: 下面是chrome: 在浏览百度首页前我都将浏览器的缓存全部清理掉,让这个场景最接近第一次访问 ...

  5. 第一个shell脚本

    打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好. #!/bin/bash echo "Hello World !" &quo ...

  6. Java 8 的 Nashorn 脚本引擎教程

    本文为了解所有关于 Nashorn JavaScript 引擎易于理解的代码例子. Nashorn JavaScript 引擎是Java SE 8的一部分,它与其它像Google V8 (它是Goog ...

  7. 【开源】.Net 动态脚本引擎NScript

    开源地址: https://git.oschina.net/chejiangyi/NScript 开源QQ群: .net 开源基础服务  238543768 .Net 动态脚本引擎 NScript   ...

  8. InstallShield 脚本语言学习笔记

    InstallShield脚本语言是类似C语言,利用InstallShield的向导或模板都可以生成基本的脚本程序框架,可以在此基础上按自己的意愿进行修改和添加.     一.基本语法规则      ...

  9. <译>通过PowerShell工具跨多台服务器执行SQL脚本

    有时候,当我们并没有合适的第三方工具(大部分需要付费)去管理多台数据库服务器,那么如何做最省力.省心呢?!Powershell一个强大的工具,可以很方便帮到我们处理日常的数据库维护工作 .简单的几步搞 ...

随机推荐

  1. phpStorm pycharm编辑器主题修改,自定义颜色

    新的启程 注: 本人小菜鸟一枚,内容也是从其他博客中借鉴的,谨以此作为写博客开端. phpstorm修改主题: 1. phpstorm主题下载 http://www.phpstorm-themes.c ...

  2. OGEngine教程:字体工具使用

    1.打开 BitmapFont tool,在红框中输入你要显示的字. 2.写完后保存字体文件 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvT3Jhbmdl ...

  3. C - Common Subsequence

    C - Common Subsequence Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I ...

  4. [原创]实现多层DIV叠加的js事件穿透

    Flash里面有个很好的特性是,一个容器里,不存在实际对象的部分,不会阻拦鼠标事件穿透到下一层. 前端就不一样了,两个div层叠以后,上层div会接收到所有事件(即使这个div里面内容是空的,没有任何 ...

  5. EasyDarwin开源流媒体服务器Golang版本:服务端录像功能发布

    EasyDarwin开源流媒体服务器(www.easydarwin.org)现在使用Go版本实现了.最新的代码提交,已经支持了推流(或者拉流)的同时进行本地存储. 本地存储的原理,是在推流的同时启动f ...

  6. echart 图表自定义样式

    initChart: function (id) { this.charts = echarts.init(document.getElementById(id)) this.charts.setOp ...

  7. Wrapper配置详解及高级应用

      将一个简单的程度如HelloWorld 的应用包装秤Wrapper 服务并不复杂,甚至可以认为非常简单.但是实际项目应用过程中我们的程序一般较庞大,运行环境也较复杂. 通过Wrapper 配置文件 ...

  8. zoj 3721 Final Exam Arrangement【贪心】

    题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3721 来源:http://acm.hust.edu.cn/vjudg ...

  9. cocoapods最新使用

    1.首先用淘宝的Ruby镜像来访问CocoaPods,打开终端输入以下命令: (1)gem sources --remove http://ruby.gems.org/   (移除现有Ruby默认源) ...

  10. host更新

    http://alsohosts.herokuapp.com/ google镜像站https://goge.ml/