获取redis实例绑定cpu的情况
redis是一个单线模型的nosql类型的数据库,而目前接触到的服务器大都是多核的,比如8c,16c,32c,64c等等。为了充分利用主机,在一台主机上必然会部署多个redis实例,默认情况cpu会随机选择,但经过观察自动选择的时候很大情况下会选择同一逻辑cpu,这样导致cpu使用不均衡,撑得死了,饿的饿死了,怎么破。
其实可以对指定的进程id进行cpu绑定,绑定前的情况如下:
27001 instance bind on cpu 0-7
27002 instance bind on cpu 0-7
27003 instance bind on cpu 0-7
27004 instance bind on cpu 0-7
27005 instance bind on cpu 0-7
27007 instance bind on cpu 0-7
27008 instance bind on cpu 0-7
生成绑定的命令
ps aux|grep redis-server |grep -v grep |awk 'BEGIN {i=0}{i++}{print "taskset -pc " i, $2}'
绑定后的情况如下:
27001 instance bind on cpu 1
27002 instance bind on cpu 2
27003 instance bind on cpu 3
27004 instance bind on cpu 4
27005 instance bind on cpu 5
27007 instance bind on cpu 6
27008 instance bind on cpu 7
绑定后获取cpu绑定情况的确认脚本如下:
ps -ef |grep redis-server |grep -v grep | awk '$NF~/cluster/{print $2,$(NF-1);next}{print $2,$NF}' > pid_instance
cat pid_instance | while read line
do
pid=$(echo $line | awk '{print $1}')
port=$(echo $line | awk -F':' '{print $2}')
echo "$port instance bind on cpu `taskset -pc $pid | awk -F':' '{print $2}'`"
done
rm -rf pid_instance
如果有很多台redis实例,可以通过ansible分发该脚本到对应的主机上,然后跑一下sh redis_cpu.sh xxx脚本,xxx文件中是以all为分组的redis主机列表,例如:
cat >redis_cpu.sh <<EOF
#!/bin/bash ansible -i $1 all -m copy -s -a "src=./get_redis_bind_cpu.sh dest=/tmp/get_redis_bind_cpu.sh"
ansible -i $1 all -m shell -s -a "sh get_redis_bind_cpu.sh"
EOF cat >get_redis_bind_cpu.sh <<EOF
#!/bin/bash ps -ef |grep redis-server |grep -v grep | awk '$NF~/cluster/{print $2,$(NF-1);next}{print $2,$NF}' > pid_instance cat pid_instance | while read line
do
pid=$(echo $line | awk '{print $1}')
port=$(echo $line | awk -F':' '{print $2}')
echo "$port instance bind on cpu `taskset -pc $pid | awk -F':' '{print $2}'`"
done
rm -rf pid_instance
EOF
添加一下输出优化,直观看出来是不是绑定了cpu
ps -ef |grep redis-server |grep -v grep | awk '$NF~/cluster/{print $2,$(NF-1);next}{print $2,$NF}' > pid_instance
cat pid_instance | while read line
do
pid=$(echo $line | awk '{print $1}')
port=$(echo $line | awk -F':' '{print $2}')
bind_current=$(taskset -pc $pid | awk -F':' '{print $2}')
total=$(cat /proc/cpuinfo |grep processor |wc -l)
start=0
let end=total-1
bind_default="$start-$end"
if [[ $bind_current -ne $bind_default ]];then
echo "$port instance bind on cpu $bind_current ok"
else
echo "$port instance not set bind cpu default $bind_default,please check!!!"
fi
done
rm -rf pid_instance
如果没有绑定:
[root@testdb1 ~]# sh c.sh
6379 instance not set bind cpu default 0-23,please check!!!
29009 instance not set bind cpu default 0-23,please check!!!
29095 instance not set bind cpu default 0-23,please check!!!
27000 instance not set bind cpu default 0-23,please check!!!
27001 instance not set bind cpu default 0-23,please check!!!
29001 instance not set bind cpu default 0-23,please check!!!
29002 instance not set bind cpu default 0-23,please check!!!
29003 instance not set bind cpu default 0-23,please check!!!
29004 instance not set bind cpu default 0-23,please check!!!
29005 instance not set bind cpu default 0-23,please check!!!
29006 instance not set bind cpu default 0-23,please check!!!
29007 instance not set bind cpu default 0-23,please check!!!
29008 instance not set bind cpu default 0-23,please check!!!
29000 instance not set bind cpu default 0-23,please check!!!
如果有绑定
27183 instance bind on cpu 1 ok
27184 instance bind on cpu 2 ok
27185 instance bind on cpu 3 ok
27186 instance bind on cpu 4 ok
27187 instance bind on cpu 5 ok
27188 instance bind on cpu 6 ok
27189 instance bind on cpu 7 ok
27190 instance bind on cpu 8 ok
27191 instance bind on cpu 9 ok
27192 instance bind on cpu 10 ok
27193 instance bind on cpu 11 ok
27194 instance bind on cpu 11 ok
27195 instance bind on cpu 10 ok
27196 instance bind on cpu 9 ok
27197 instance bind on cpu 8 ok
@20190509
cat >get_redis_bind_cpu.sh <<EOF
#!/bin/bash ps -ef |grep redis-server |grep -v grep | awk '\$NF~/cluster/{print \$2,\$(NF-1);next}{print \$2,\$NF}' > pid_instance cat pid_instance | while read line
do
pid=\$(echo \$line | awk '{print \$1}')
port=\$(echo \$line | awk -F':' '{print \$2}')
bind_current=\$(taskset -pc \$pid | awk -F':' '{print \$2}')
total=\$(cat /proc/cpuinfo |grep processor |wc -l)
start=0
let end=total-1
bind_default="\$start-\$end"
if [[ \$bind_current -ne \$bind_default ]];then
echo "\$port instance bind on cpu \$bind_current ok"
else
echo "\$port instance not set bind cpu default \$bind_default,please check!!!" >> no_bind.log
fi
done
rm -rf pid_instance
EOF cat >redis_cpu.sh <<EOF
#!/bin/bash ansible -i \$1 all -m copy -s -a "src=./get_redis_bind_cpu.sh dest=/tmp/get_redis_bind_cpu.sh" > /dev/null
ansible -i \$1 all -m shell -s -a "cd /tmp;sh get_redis_bind_cpu.sh" > /dev/null
ansible -i \$1 all -m shell -s -a "ls -l /tmp/no_bind.log 2>/dev/null" EOF PS:
1.执行前确保ansible到目标所有redis实例的机器可以跑通。
2.执行sh redis_cpu.sh redis_host |grep -v FAILED
3.有输出的即是对应主机上redis实例存在没有绑定cpu的,具体实例端口在对应机器的/tmp/no_bind.log
获取redis实例绑定cpu的情况的更多相关文章
- 获取redis实例中最大的top-N key
需求:获取redis实例中最大的top-N key 说明:由于redis 4.x才引入了memory usage keyname的语法.3.x不支持! db_ip=5.5.5.101 db_port= ...
- 从阿里云迁移分布式redis实例到华为云解决方案(详细)
如果要换多数是经济因素啦- 一. 准备工作 先在华为云上买一台redis数据库,配置一定要注意多数要保持一致,至于4.0还是5.0倒问题不大亲测兼容 可用区要找现有ECS云主机中的相同的机器.记下:这 ...
- 一次线上redis实例cpu占用率过高问题优化(转)
前情提要: 最近接了大数据项目的postgresql运维,刚接过来他们的报表系统就出现高峰期访问不了的问题,报表涉及实时数据和离线数据,离线读pg,实时读redis.然后自然而然就把redis也挪到我 ...
- redis实例cpu占用率过高问题优化
目录 一.简介 一.简介 前情提要: 最近接了大数据项目的postgresql运维,刚接过来他们的报表系统就出现高峰期访问不了的问题,报表涉及实时数据和离线数据,离线读pg,实时读redis.然后自然 ...
- 获取CPU使用情况信息(转)
获取了内存使用情况,也可以使用PHP的 getrusage()获取CPU使用情况,该方法在windows下不可用. print_r(getrusage()); /* 输出 Array ( [ru ...
- 获取redis cluster中所有节点的内存使用情况
需求:获取redis cluster集群中所有节点的内存使用情况. ip_port=`redis-cli -h $ -p $ -a abc123 -c cluster nodes | awk '{pr ...
- 获取redis指定实例中所有的key
需求:获取redis指定的实例中所有的key的名字. 千万不要使用keys *,可以使用scan命令的递归方式获取. 以下给出自己写的脚本,经过测试效果还可以. db_ip=5.5.5.101 db_ ...
- Redis优化之CPU充分利用
Linux Redis Server之CPU充分利用 不知道大家有没有注意到你们公司的集群配置是否是有一种配置是这样的: 多个Redis Server分布在同一个节点,只是端口不同,如果有的话,应该是 ...
- NGINX源代码剖析 之 CPU绑定(CPU亲和性)
作者:邹祁峰 邮箱:Qifeng.zou.job@gmail.com 博客:http://blog.csdn.net/qifengzou 日期:2014.06.12 18:44 转载请注明来自&quo ...
随机推荐
- Magicodes.IE 2.0发布
Magicodes.IE 2.0发布 Magicodes.IE是我们维护的开源的导入导出通用库,去年年底已加入NCC开源组织. Github地址:https://github.com/xin-lai/ ...
- JavaScript所有函数和内置方法
Number isFiniter() 检测传入的的数值是否在无穷大和无穷小之间(有限数字或者是可转换成有限数字)返回true,否则返回false.NaN返回false. isFinite(Number ...
- JavaScript 与 Java 有什么不同?
JavaScript 编程语言是由 Netscape,Inc. 开发的,它并不是 Java 平台的一部分. JavaScript 不会创建小应用程序或独立应用程序.在最常见的形式中,JavaScrip ...
- BZOJ 2161 布娃娃(权值线段树)
题意 给n<1e5个娃娃,每个娃娃有属性\(p\),\(c\),\(l\),\(r\)(均在ll范围内),问你对每个娃娃\(i\),满足所有\(l_j\leq p_i\leq r_j\)的娃娃\ ...
- Integer缓存机制-基本数据类型和包装类型-自动拆装箱
Integer缓存机制 总结: 1.jdk1.5对Integer新增了缓存机制,范围在-128-127(这个范围的整数值使用频率最高)内的自动装箱返回的是缓存对象,不会new新的对象,所以只要在缓存范 ...
- pytorch-- Attention Mechanism
1. paper: Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translat ...
- tomcat 日志
1.Tomcat的日志(./tomca/logs/) 分为5类,这里面 1和5比较重要 .catalina.--.log 或者 catalina.out: 引擎的日志文件 .host-manager. ...
- win10双击执行python
一. 设置py环境 去官网下载Windows x86-64 executable installer安装 安装后会自动配置py的bin路径和pip的路径 Pip用于安装python库的 二. 设置wi ...
- Nginx-2.初学者使用
原文 Nginx有一个master进程和几个worker进程.master进程用来读取和评估配置文件,以及维护worker进程.worker进程用来处理实际的请求.Nginx使用事件模型和基于操作系统 ...
- [未完成]ECRound 80
Educational Codeforces Round 80 (Rated for Div. 2)A 大意:寻找x使得等式<=n,若满足情况输出YES否则NO 解法:纯数学题,先构造函数f(x ...