如何检测出redis的哪些key在消耗内存

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 如何检测出redis的哪些key在消耗内存

今天发现测试环境Redis进程被OOM killer了,所以,直觉就是优先找出消耗内存的罪魁祸首key。

redis-rdb-tools 是专门用来干这活的,我们先来了解下:

一、rdbtools工具介绍

源码地址:https://github.com/sripathikrishnan/redis-rdb-tools/

redis-rdb-tools 是一个 用python开发的用于解析 rdb 文件的工具,在解析的时候,它会生成类似于xml sax解析器的事件,在内存检测方面非常有效

它主要有以下三个功能:

  • 生成内存快照
  • 转储成 json 格式
  • 使用标准的 diff 工具比较两个 dump 文件

市面上有用其他语言开发的类似的工具,Rdbtools用Python开发,安装时最好用3以上版本,我这边用的是3.6+,你可以从https://rdbtools.com 中了解到更多的关于管理redis的界面RedisInsight,商业支持,和其他企业级特性

如何安装:

1.python-lzf 是可选安装,但强烈建议你安装,因为它可以加速解析的过程

2.redis-py 是可选的,只是在跑测试的时候有用

建议用pip3安装

pip3 install rdbtools python-lzf

生成内存报告,列出大小大于128字节的,内存占用最大的前10的key的详情,可惜未有经过排序,并生成redis.csv文件

注意:内存使用量是近似的。在一般情况下,略低于实际值。可以根据key或数据库ID或数据类型对报告的内容进行过滤。

内存报告有助于检测是否是应用程序逻辑导致的内存泄露,也有助于优化reids内存使用情况。

./rdb -c memory -l 10 /data/redis/6386/dump.rdb --bytes 128 >/tmp/redis.csv

结果为:

database type key size_in_bytes encoding num_elements len_largest_element expiry
0 hash user_record:251932 26940 hashtable 604 13  
0 string record:277 6232 string 5529 5529 2037-06-26T13:43:49.117000
0 string record:278 6232 string 5544 5544 2037-06-26T13:59:38.661000
0 string record:420 6232 string 5522 5522 2037-03-19T13:33:49.059000
0 string record:526 6232 string 5687 5687 2037-03-26T14:30:06.601000
0 string record:244 7256 string 6276 6276 2037-06-23T15:02:49.080000
0 string record:3151 8280 string 7872 7872 2039-09-01T13:21:30.615000
0 string record:445 10328 string 8374 8374 2037-08-18T08:06:48.196000
0 string record:447 10328 string 8375 8375 2037-08-18T08:16:48.038000
0 hash user_record:126661 25476 hashtable 543 13  

输出字段说明:

database :key在redis的db
type :key类型
key :key值
size_in_bytes :key的内存大小(byte)
encoding :value的存储编码形式
num_elements :key中的value的个数
len_largest_element :key中的value的最大长度
expiry :key过期时间

按键值大小排序(TODO...)

awk -F',' '{print $4,$2,$3,$1}' /tmp/redis.csv | sort  > /tmp/redis_sort.csv

如何输出某个key的占用大小?

./redis-memory-for-key -p 6386 -a ooxx user_record:251932

输出:

Key                             user_record:251932
Bytes                           26940.0
Type                            hash
Encoding                        hashtable
Number of Elements              604
Length of Largest Element       13

 

RedisTimeSeries是一个Redis模块,向Redis添加了时间序列数据结构。

他有如下的功能:

在此处 阅读有关v1.0 GA功能的更多信息 。

  • 高容量插入,低延迟读取
  • 按开始时间和结束时间查询
  • 任何时间段的汇总查询(最小,最大,平均,总和,范围,计数,第一,最后,STD.P,STD.S,Var.P,Var.S)
  • 可配置的最大保留期限
  • 下采样/压缩-自动更新汇总的时间序列
  • 次要索引-每个时间序列都有标签(字段值对),可以按标签查询

下载:https://redislabs.com/download-center/modules/

启动:

redis-server /data/redis/6385/6385.conf --loadmodule /usr/local/redis-5.0.9/redistimeseries.so

这样

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
4天前
|
Web App开发 JavaScript 前端开发
使用 Chrome 浏览器的内存分析工具来检测 JavaScript 中的内存泄漏
【10月更文挑战第25天】利用 Chrome 浏览器的内存分析工具,可以较为准确地检测 JavaScript 中的内存泄漏问题,并帮助我们找出潜在的泄漏点,以便采取相应的解决措施。
51 9
|
4天前
|
监控 JavaScript 前端开发
如何检测和解决 JavaScript 中内存泄漏问题
【10月更文挑战第25天】解决内存泄漏问题需要对代码有深入的理解和细致的排查。同时,不断优化和改进代码的结构和逻辑也是预防内存泄漏的重要措施。
19 6
|
6天前
|
缓存 监控 NoSQL
Redis 缓存穿透的检测方法与分析
【10月更文挑战第23天】通过以上对 Redis 缓存穿透检测方法的深入探讨,我们对如何及时发现和处理这一问题有了更全面的认识。在实际应用中,我们需要综合运用多种检测手段,并结合业务场景和实际情况进行分析,以确保能够准确、及时地检测到缓存穿透现象,并采取有效的措施加以解决。同时,要不断优化和改进检测方法,提高检测的准确性和效率,为系统的稳定运行提供有力保障。
31 5
|
7天前
|
Web App开发 缓存 JavaScript
如何检测和解决闭包引起的内存泄露
闭包引起的内存泄露是JavaScript开发中常见的问题。本文介绍了闭包导致内存泄露的原因,以及如何通过工具检测和代码优化来解决这些问题。
|
15天前
|
NoSQL Unix Redis
Redis 键(key)
10月更文挑战第15天
28 1
|
22天前
|
缓存 监控 负载均衡
如何解决Redis热点Key问题?技术干货分享
【10月更文挑战第2天】在Redis的使用过程中,热点Key问题是一个常见的性能瓶颈。热点Key指的是那些被频繁访问的Key,它们可能导致Redis服务器的负载不均衡,进而影响整体性能。本文将深入探讨热点Key问题的成因、影响以及多种解决方案,帮助读者在实际工作中有效应对这一挑战。
40 3
|
21天前
|
Web App开发 开发者
|
10天前
|
缓存 监控 Java
内存泄漏:深入理解、检测与解决
【10月更文挑战第19天】内存泄漏:深入理解、检测与解决
20 0
|
18天前
|
JavaScript 前端开发 安全
如何避免闭包带来的内存消耗呢
【10月更文挑战第12天】如何避免闭包带来的内存消耗呢
23 0
|
22天前
|
数据处理 Python
Python读取大文件的“坑“与内存占用检测
Python读取大文件的“坑“与内存占用检测
41 0