首页 > 数据库 >记一次线上Redis内存占用过高、大Key问题的排查

记一次线上Redis内存占用过高、大Key问题的排查

时间:2024-05-09 12:34:48浏览次数:28  
标签:分析 占用 Redis 内存 Key RDB

问题背景

在一个风和日丽的下午,公司某项目现场运维同学反馈,生产环境3个Redis的Sentinel集群节点内存占用都很高,达到了17GB的内存占用量。

稍加思索,应该是某些Key的Value数据体量过大,占用了过多的内存空间,我们在使用Redis的过程中,单个Value或者单个集合中的元素应该保证不超过10KB,已获取最佳的实践体验。

工具推荐

网上搜索了一番,关于分析大Key的工具还挺多,分为Redis官网工具和第三方工具。

经过一番比对,不同的工具都体验了一下,这里跳过工具之间的对比过程,直接给结论:redis data reveal

大家可以在releases中下载打包好的应用程序,这里也给个国内加速下载地址:蓝奏云

因为线上已经开启了Redis的RDB和AOF持久化策略,直接把RDB文件拉到本地。

如果没有开启RDB可以使用bgsave命令导出

执行RDB文件分析命令:

chmod +x rdr-linux
./rdr-linux show -p 8099 dump.rdb

等待一会儿,程序会自动对RDB文件进行分析,分析完成后会在设置的端口打开web服务,我们的RDB文件有4GB,分析耗时大概5分钟,分析过程日志如下:

start parsing...
parse dump.rdb  done
parsing finished, please access http://{$IP}:8099

打开分析报告页面,查看到的queue:sdk:audit:log占用了17GB内存,经分析后发现是由于下游消费服务未部署导致队列数据积压所致:

通过Redis集群的Slave节点,再次查看对应的key大小(字节数):

127.0.0.1:9532> memory usage queue:sdk:audit:log
(integer) 18124761989

至此,可以确定是该Key的原因导致Redis内存占用过高,因为这个key在该项目未使用到,所有对生产者做了优化处理,并删除线上Redis对应的key。

标签:分析,占用,Redis,内存,Key,RDB
From: https://www.cnblogs.com/changxy-codest/p/18181867

相关文章

  • redis、LVS、nginx的基本使用方法
    redis、LVS、nginxredis搭建哨兵原理哨兵搭建至少要有3个机器,且必须为奇数个redis搭建哨兵之前要先实现主从复制;master的配置文件中的masterauth和slave都必须相同实现主从复制之所有从节点配置文件[root@slave~]#yuminstall-yredis[root@slave~]#vim/etc/redis.c......
  • Redis热点key大key
    一、热点key问题  1、商品秒杀、热点新闻、热点评论等读多写少的场景,可能会造成一个较大的请求Redis量,这种情况下就会造成热点Key问题。  2、请求分片集中,超过单台Redis服务器的性能极限。    手动分片或者custer分片切分,刚好一致性hash落入同一台redis服务器,数据倾......
  • Redis的监控指标
    一、内存使用情况  redis-cliinfo#memory1、总内存使用量(80%)。used_memory实际使用内存  used_memory_peak峰值,used_memory_rss系统分配给redis的总内存大小,包含内存碎片。2、内存碎片。mem_fragmentation_ratio=used_memory_rss/used_memory    <1表示Redi......
  • 5个.Net版本 Redis 客户端开源库
    Redis作为一个高性能(NOSQL)的key-value数据库,在实际项目开发中运用非常广泛,也适用于很多业务场景。下面介绍5个.Net版本Redis客户端开源库,方便开发和提升效率。1、StackExchange.Redis简介:由StackExchange团队开发。它提供了丰富的功能和选项,如连接池、管道、事务、发布/订阅......
  • libvips 一个最好用的高性能、低内存、跨平台的图片处理库
    一个可以媲美OpenCV的开源库,它具有高性能、低内存、跨平台、无内存泄漏的特性。项目简介这是用C++开发的图像处理库,支持的API超过300多个,涵盖了算术、颜色、图片转换、卷积、形态、马赛克、合并、切割等。支持多种图像格式,包括:JPEG、JPEG2000、JPEG-XL、TIFF、PNG、WebP、HEIC......
  • redis的订阅与发布
    1.订阅的关系维护redis的所有频道的订阅关系都维护在pubsub_channels字典里面,这个字典的key是被订阅的频道,而value是订阅客户端的链表。structredisServer{//...//保存所有订阅关系dict*pubsub_channels;//...}字典示例:与此类似,服务器也将......
  • Elements in iteration expect to have 'v-bind:key' directives.
    当组件中使用v-for时,如果不指定key,则会有红色警告信息。解决方案如下。方案一:绑定key(亲试有效)//方式一<liv-for="(item,index)inlist":key="index">//方式二<liv-for="(item,index)inlist":key="item.id">//方式三<liv-for="(item,in......
  • docker搭建redis集群(三主三从)及重启redis集群 redis扩容新增集群
    docker搭建redis集群(三主三从)及重启redis集群一、docker搭建redis集群1、下载redis镜像文件从远程仓库先拉取一下redis的镜像文件,如果已经提前安装过镜像的,可以跳过此步骤:dockerpullredis:6.0.82、查看本地拉取到镜像文件dockerimages 看到图上标识,就说明当前镜像文件已......
  • Redis
    redis是什么?为什么使用?基于内存的,k,v形式非关系型数据库,单机可支持十万tps。为什么使用?解决并发、性能问题,弥补关系型数据库的不足。redis的特点?1.高可用架构2.高性能3.支持持久化4.支持多种数据结构5.支持pub/sub消息模式6.支持多种语言7.原子操作,所有操作都是原子操作,......
  • c# Dictionary<TKey,TValue>.TryAdd
    原文链接:https://learn.microsoft.com/zh-cn/dotnet/fundamentals/code-analysis/quality-rules/ca1864Dictionary<TKey,TValue>.ContainsKey(TKey) 和 Dictionary<TKey,TValue>.Add 都执行查找操作,这是冗余设置。如果字典中已存在键,Dictionary<TKey,TValue>.Add 也会引发异......