Redis Cluster机器内存充爆处理
机器配置
系统:CentOS6.7
配置:4C8G
应用:Redis Cluster,实例化
现象
1、无法启动redis,启动后系统OOM,直接杀死
2、Redis: OOM command not allowed when used memory > ‘maxmemory’
原因
内存已满,不允许数据在写入
注:
used_memory_human表示已用内存
used_memory_rss表示系统给redis分配的内存(即常驻内存)
mem_fragmentation_ratio=used_memory_rss/used_memory比例,一般情况下,used_memory_rss略高于used_memory,当内存碎片较多时,则mem_fragmentation_ratio会较大,可以反映内存碎片是否很多
解决过程
1、首先查看redis的内存使用,如上图。可以看到已用内存5G多,常驻内存3.8G多。而我们的机器内存只有8G可用。明显内存已经充爆。接下来想到的就应该是key的量太大了还是value的量太大了。
2、找出redis中的key。
###查看key的个数(最好是把key拿出来分析)
keys *
echo "keys *" |/usr/local/redis/bin/redis-cli -p 6381 > /tmp/6381.log
3、分析发现key中有650000的common:order:LogCacheKey这样的key,接下来我们需要确认下这些key的大小
###查看key大小的命令
debug object
echo 'debug object "common:order:LogCacheKey90bef863-dfc7-4739-8404-9b6624a70196"' |/usr/local/redis/bin/redis-cli -p 6381
4、分析发现common:order:LogCacheKey所占用的内存为3G左右。因此找到元凶为这个key所导致的。
5、清理key
for i in `grep common:order:Log 6381.log`;do echo "del $i" |/usr/local/redis/bin/redis-cli -p 6381; done
6、key已经找到删除,现在要查找是哪个应用产生的。
因为开发人员没在,那从运维角度,我是从网络流量来分析的,使用iftop
根据流量大小,找到对应的主机,联系到开发人员确认。
小技巧
如果key少的话,可以直接取出每个key对应的value的大小,按照从大到小的顺序排序
for i in `cat /tmp/6379.log`;do echo -n "$i "; echo "debug object $i"|/usr/local/redis/bin/redis-cli -p 6379|awk -F '[ |:]+' '{print $9}';done|sort -r -n -k2
总结
1、问题发生后,用最快最简单的方式先把问题解决。减少影响的时间。比如升级扩大内存。
2、此次遇到的问题是在测试环境,如果确认redis中数据可以清除,可以使用暴力的方式直接清空本地的实例化文件,将内存释放出来。但是生产环境切不可进行此操作。
Redis Cluster机器内存充爆处理的更多相关文章
- 合理利用配置不同的机器资源做redis cluster的server
Redis cluster可以使用不同配置的机器学习因为我们可以手动调整不同的机器所承担的slot的个数,这样内存小CPU相对少的机器应该承担更少的slots
- 获取redis cluster中所有节点的内存使用情况
需求:获取redis cluster集群中所有节点的内存使用情况. ip_port=`redis-cli -h $ -p $ -a abc123 -c cluster nodes | awk '{pr ...
- 全面剖析Redis Cluster原理和应用 (转)
1.Redis Cluster总览 1.1 设计原则和初衷 在官方文档Cluster Spec中,作者详细介绍了Redis集群为什么要设计成现在的样子.最核心的目标有三个: 性能:这是Redis赖以生 ...
- Redis中国用户组|唯品会Redis cluster大规模生产实践
嘉宾:陈群 很高兴有机会在Redis中国用户组给大家分享redis cluster的生产实践.目前在唯品会主要负责redis/hbase的运维和开发支持工作,也参与工具开发工作 Outline 一.生 ...
- 全面剖析Redis Cluster原理和应用 (good)
redis redis cluster注意的问题 : 1.‘cluster-require-full-coverage’参数的设置.该参数是redis配置文件中cluster模式的一个参数,从字面上基 ...
- Redis cluster学习 & Redis常识 & sort操作
Redis中的5种数据类型String.Hash.List.Set.Sorted Set. Redis源码总代码一万多行. 这篇文章有一些Redis "常识" http://www ...
- Redis Cluster 实践
一:关于redis cluster 1:redis cluster的现状 reids-cluster计划在redis3.0中推出,可以看作者antirez的声明:http://antirez.com/ ...
- Redis Cluster的搭建与部署,实现redis的分布式方案
前言 上篇Redis Sentinel安装与部署,实现redis的高可用实现了redis的高可用,针对的主要是master宕机的情况,我们发现所有节点的数据都是一样的,那么一旦数据量过大,redi也会 ...
- Redis Cluster架构优化
Redis Cluster架构优化 在<全面剖析Redis Cluster原理和应用>中,我们已经详细剖析了现阶段Redis Cluster的缺点: 无中心化架构 Gossip消息的开销 ...
随机推荐
- opencv——对象计数
思路: 1.通过形态学操作.阈值处理.距离变换等方法,使得各个轮廓分开 2.计算轮廓数量 #include <opencv2/opencv.hpp> #include <iostr ...
- P1341 无序字母对
题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...
- nginx rewrite flag
1.break可以理解为switch中的break,而last可以理解为continue,一个是跳出server{}的匹配规则,一个还将继续匹配之后的规则. 无论使用last还是break,浏览器上面 ...
- 6-51单片机ESP8266学习-AT指令(8266TCP服务器--做自己的AndroidTCP客户端发信息给单片机控制小灯的亮灭)
http://www.cnblogs.com/yangfengwu/p/8776712.html 先把源码和资料链接放到这里 链接: https://pan.baidu.com/s/1jpHZjW_7 ...
- Windows下配置Django环境
辛辛苦苦,终于在Windows10上把Django环境搭建并成功建立工程 1.首先安装python,配置环境变量path:C:\Python27:C:\Python27\Scripts: 2.去dja ...
- Usaco2012-2013 金组 题解 (暂缺Hill walk以及Figue eight)
https://files.cnblogs.com/files/Winniechen/usaco2012-2013.pdf 做的不是很好,还请见谅! 如果有什么疑问,可以QQ上找我. QQ号:1967 ...
- Huploadify V2.1+ SpringMVC上传文件的实现
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- 20155334 曹翔 Exp2 后门原理与实践
20155334 曹翔 Exp2 后门原理与实践 不多废话直接上实验过程,本实验的所有端口都是5334. 一.实验过程 查询主机Windows和虚拟机kali的ip地址: Windows获得Linux ...
- python变量名感悟
我感悟的是python的变量名其实就可以理解为C/C++中的指针! 1.python的变量在使用之前必须赋值,就像指针在使用之前不能为空. 2.python的内存可以用del释放,C++可以用dele ...
- JAVA eclipse Maven项目红叹号解决方案
我是通过 Windows --> show view --> problems 查看到发现 ch.qos.logback 1.1.1 出现了错误, 于是我换成了 ch.qos.logbac ...