您当前的位置:首页 > 电脑百科 > 数据库 > Redis

redis内存使用分析

时间:2019-07-29 15:48:12  来源:  作者:

今天解决一个redis内存使用量大的问题。和大家分享一下。

有一个历史遗留系统A,因为一些业务原因,申请了很大的redis内存。从40G一路加到了80G。但是仍然经常告警,达到了max_memory。

联系系统用户,删除了大量数据。查看内存,仍然处于紧张状态。

查了一些资料。

redis的内存使用构成

我们查询redis的内存使用:

info memory

used_memory Redis:分配器分配的内存量,也就是实际存储数据的内存总量

used_memory_human:以可读格式返回 Redis 使用的内存总量

used_memory_rss:从操作系统的角度,Redis进程占用的总物理内存

used_memory_peak:内存分配器分配的最大内存,代表used_memory的历史峰值

used_memory_peak_human: 以可读的格式显示内存消耗峰值

used_memory_lua:Lua引擎所消耗的内存

mem_fragmentation_ratio:used_memory_rss /used_memory比值,表示内存碎片率

mem_allocator:Redis 所使用的内存分配器。默认: jemalloc

计算公式如下:

used_memory = 自身内存+对象内存+缓冲内存+lua内存

used_rss = used_memory + 内存碎片

如下图所示:

redis内存使用分析

 

3.1.2 内存分析

  • 1) 自身内存:一个空的Redis占用很小,可以忽略不计
  • 2) kv内存:key对象 + value对象
  • 3) 缓冲区:客户端缓冲区(普通 + slave伪装 + pubsub)以及aof缓冲区(比较固定,一般没问题)
  • 4) Lua:Lua引擎所消耗的内存

内存突增常见问题

  • 1) kv内存:bigkey、大量写入
  • 2) 客户端缓冲区:一般常见的有普通客户端缓冲区(例如monitor命令)或者pubsub客户端缓冲区

可能出现的问题排查

  • 1) bigkey?

redis --bigkeys:可以对redis整个 keyspace 进行统计(数据量大时采样,调用 scan 命令),寻找每种数据类型较大的 keys,给出数据统计 redis-cli --bigkeys -i 0.1 -h 127.0.0.1

  • 2) 键值个数增加?
  • 3) 客户端缓冲区

如果是因为缓冲区问题,会从info clients找到明显问题。重点观察是否明显的omem大于0的情况。

  • 4) Redis的kv哈希表做了 rehash

问题解决

本次遇到的问题是客户端缓冲区问题,使用如下命令

redis-cli -c -h x.x.x.x -p 6398 -a xxxx client list | grep -v 'omem=0'

查询缓冲器非0的客户端

redis内存使用分析

 

发现有一个客户端持有了大量内存缓冲。将对应的应用重启后。内存使用量一下子降下来了。

redis内存使用分析

 



Tags:redis 内存   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
这一节我们先简单聊一下redis配置与版本注意事项,涉及到配置,键的过期、32位redis和64位的区别,后续我们再来了解Redis LRU键的驱逐策略以及具体的优化策略。1、配置redis如果...【详细内容】
2020-06-10  Tags: redis 内存  点击:(79)  评论:(0)  加入收藏
概述今天主要介绍一个Redis内存分析工具--RDR,主要是平时用来分析redis的rdbfile,下面一起来看看吧~github:https://github.com/xueqiu/rdr一、RDR 简介RDR 是解析 redis rdbf...【详细内容】
2020-05-11  Tags: redis 内存  点击:(366)  评论:(0)  加入收藏
小的聚合类型数据的特殊编码处理Redis2.2版本及以后,存储集合数据的时候会采用内存压缩技术,以使用更少的内存存储更多的数据。如Hashes,Lists,Sets和Sorted Sets,当这些集合...【详细内容】
2020-01-13  Tags: redis 内存  点击:(93)  评论:(0)  加入收藏
Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多。所以,监控 Redis 的内存消耗并了解 Redis 内存模型对高效并长期稳定使用...【详细内容】
2019-10-16  Tags: redis 内存  点击:(115)  评论:(0)  加入收藏
今天解决一个redis内存使用量大的问题。和大家分享一下。有一个历史遗留系统A,因为一些业务原因,申请了很大的redis内存。从40G一路加到了80G。但是仍然经常告警,达到了max_mem...【详细内容】
2019-07-29  Tags: redis 内存  点击:(288)  评论:(0)  加入收藏
Redis,一款技术研发者们耳熟能详的内存数据库。作为数据库,存储数据的容量都是有限的,不能超过主机内存的大小。通常而言,一台主机服务器的内存只有十几G,较大可达100G或200G。...【详细内容】
2019-07-25  Tags: redis 内存  点击:(367)  评论:(0)  加入收藏
▌简易百科推荐
来源: my.oschina.net/xiaomu0082/blog/2990388首先说下问题现象:内网sandbox环境API持续1周出现应用卡死,所有api无响应现象刚开始当测试抱怨环境响应慢的时候 ,我们重启一下应...【详细内容】
2021-12-08  Java识堂    Tags:Redis   点击:(18)  评论:(0)  加入收藏
我不知道为什么你会选择对特定数量的“错误”(或警告)如此具体。听起来您正在寻找将要发布到 Yahoo! 的某些文章的内容。 Insider (N Foos to Blah for the BlahBlah)。那说:...【详细内容】
2021-12-07  富集云科技有限公司    Tags:Redis   点击:(14)  评论:(0)  加入收藏
目录 一、背景 二、步骤 0.理论支持 1、获取数据 2、结果 3、分析数据并评估大小 三、关于repl-backlog-size 一、背景 repl-backlog-size控制这个环形缓冲区. ​ 主从断...【详细内容】
2021-11-05  弈秋的美好生活    Tags:redis   点击:(41)  评论:(0)  加入收藏
Redis 性能测试是通过同时执行多个命令实现的。1,Redis-benchmarkRedis性能命令:redis性能命令格式: redis-benchmark [option] [option value] redis 性能测试工具可选参数如...【详细内容】
2021-11-02  川石信息    Tags:Redis   点击:(41)  评论:(0)  加入收藏
1 概述数据结构和内部编码 无传统关系型数据库的 Table 模型schema 所对应的db仅以编号区分。同一 db 内,key 作为顶层模型,它的值是扁平化的。即 db 就是key的命名空间。 key...【详细内容】
2021-11-01  JavaEdge    Tags:Redis   点击:(28)  评论:(0)  加入收藏
普通java中使用引用Java redis 驱动,即可连接:import redis.clients.jedis.Jedis; public class RedisTestJava { public static void main(String[] args) { //连...【详细内容】
2021-10-13  faesuite    Tags:Redis   点击:(34)  评论:(0)  加入收藏
Redis常用的数据结构有 string list set zset hashstringstring 是 Redis 的基本的数据类型,一个 key 对应一个 value。string 类型是二进制安全的,Redis的string可以包含任...【详细内容】
2021-10-12  语霖    Tags:Redis   点击:(36)  评论:(0)  加入收藏
列表类型可以存储一组按插入顺序排序的字符串,它非常灵活,支持在两端插入、弹出数据,可以充当栈和队列的角色。> LPUSH fruit apple(integer) 1> RPUSH fruit banana(integer)...【详细内容】
2021-09-17  深夜敲代码    Tags:Redis   点击:(54)  评论:(0)  加入收藏
Redis持久化意义 是做灾难恢复,数据恢复,也可以归类到高可用的一个环节里面去,比如你的redis整个挂了,然后redis就不可用了,你要做的事情是让redis变得可用,尽快变得可用 大量的请...【详细内容】
2021-08-12  小李说IT    Tags:Redis   点击:(77)  评论:(0)  加入收藏
当查询Redis中没有的数据时,该查询会下沉到数据库层,同时数据库层也没有该数据,当这种情况大量出现或被恶意攻击时,接口的访问全部透过Redis访问数据库,而数据库中也没有这些数据...【详细内容】
2021-07-30  随便t    Tags:缓存穿透   点击:(91)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条