最近维护的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. 识别不了socket未知的名称或服务

    个人博客地址:https://blog.sharedata.info/ socket 链接导致java.net.UnknownHostException: R1-T1-N6: R1-T1-N6: 未知 ...

  2. ORACLE client 11g r2 客户端开发环境配置

    一.安装ORACLE客户端,这里不做说明.需要注意的是,客户端解压位置应该在磁盘根目录下. 如果放在带中文字或者空格的文件名的路径下出了问题,可以放到磁盘根目录在安装.应该就会没有问题. 另外,一般安 ...

  3. [JavaScript]WebBrowser控件下IE版本的检测

    转载请注明原文地址:https://www.cnblogs.com/litou/p/10772272.htm 在客户端检查用户使用的浏览器类型和版本,都是根据navigator.userAgent属性 ...

  4. 2017-2018-1 20179209《Linux内核原理与分析》第八周作业

    Linux内核如何装载和启动一个可执行程 一.实验 1.1理解编译链接的过程和ELF可执行文件格式. 1.1.1编译链接过程 能用图说明的问题,就少用文字描述: 1.1.2ELF可执行文件 ELF可执 ...

  5. 我的Android进阶之旅------>Android实现用Android手机控制PC端的关机和重启的功能(三)Android客户端功能实现

    我的Android进阶之旅------>Android实现用Android手机控制PC端的关机和重启的功能(一)PC服务器端(地址:http://blog.csdn.net/ouyang_pen ...

  6. 使用asn1tools进行asn1编解码

    最近在做3GPP的编解码,发现有两个第三方库比较好用.一个是ASN1C(c语言编译环境),一个是python第三方库asn1tools.这里介绍下asn1tools的使用方法: 1 第一步:生成asn ...

  7. Spring AspectJ AOP 完整示例

    http://outofmemory.cn/java/spring/AOP/aop-aspectj-example-before-after-AfterReturning-afterThrowing- ...

  8. 移动端 触摸事件 ontouchstart、ontouchmove、ontouchend、ontouchcancel[转]

    转:http://www.cnblogs.com/irelands/p/3433628.html 1.Touch事件简介pc上的web页面鼠 标会产生onmousedown.onmouseup.onm ...

  9. Android:日常学习笔记(10)———使用LitePal操作数据库

    Android:日常学习笔记(10)———使用LitePal操作数据库 引入LitePal 什么是LitePal LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式 ...

  10. Filebeat 导入 Elasticsearch 的方法

    Filebeat 导入 Elastaticsearch 的方法 1. 什么是Filebeat?到底是干什么的? Filebeat说实话,就是一个日志监控分发器,类似tail -f这样去监控某个日志,或 ...