文章系转载,方便整理和归纳,源文地址 https://developer.aliyun.com/article/62899

简介: 线上经常遇到用户想知道自己Redis实例内存使用情况,质疑内存占用量太高。为了不影响线上实例的使用,我们一般会采用bgsave生成dump.rdb文件,再结合redis-rdb-tools和sqlite来进行静态分析。

背景

线上经常遇到用户想知道自己Redis实例中数据的内存分布情况。
为了不影响线上实例的使用,我们一般会采用bgsave生成dump.rdb文件,再结合redis-rdb-tools和sqlite来进行静态分析。

创建备份

自建Redis可在客户端执行bgsave生成rdb文件。
阿里云数据库Redis版可以在控制台上可以进行数据备份和下载的操作,下载后的数据为rdb格式文件。
步骤详见下图:

生成内存快照

redis-rdb-tools是一个python的解析rdb文件工具, 主要有一下三个功能:

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

在分析内存的使后,我们主要用到它的生成内存快照功能。

redis-rdb-tools安装

redis-rdb-tools有两种安装方式,任选其一即可。
使用PYPI安装

pip install rdbtools

从源码安装

git clone https://github.com/sripathikrishnan/redis-rdb-tools
cd redis-rdb-tools
sudo python setup.py install

使用redis-rdb-tools生成内存快照

生成内存快照的命令为:

rdb -c memory dump.rdb > memory.csv

生成CSV格式的内存报告。包含的列有:数据库ID,数据类型,key,内存使用量(byte),编码。内存使用量包含key、value和其他值。
注意:内存使用量是理论上的近似值,在一般情况下,略低于实际值。
memory.csv例子:

$head memory.csv
database,type,key,size_in_bytes,encoding,num_elements,len_largest_element
0,string,"orderAt:377671748",96,string,8,8
0,string,"orderAt:413052773",96,string,8,8
0,sortedset,"Artical:Comments:7386",81740,skiplist,479,41
0,sortedset,"pay:id:18029",2443,ziplist,84,16
0,string,"orderAt:452389458",96,string,8,8

分析内存快照

SQLite,是一款轻型的数据库。我们可以将前面生成的csv导入到数据库中之后,就可以利用sql语句很方便的对Redis的内存数据进行各种分析了。
导入方法:

sqlite3 memory.db
sqlite> create table memory(database int,type varchar(128),key varchar(128),size_in_bytes int,encoding varchar(128),num_elements int,len_largest_element varchar(128));
sqlite>.mode csv memory
sqlite>.import memory.csv memory

数据导入以后,接下来想怎么分析就怎么分析了,举几个简单的例子:

查询key个数

sqlite>select count(*) from memory;

查询总的内存占用

sqlite>select sum(size_in_bytes) from memory;

查询内存占用最高的10个key

sqlite>select * from memory order by size_in_bytes desc limit 10;

查询成员个数1000个以上的list

sqlite>select * from memory where type='list' and num_elements > 1000 ;

总结

通过使用redis-rdb-tools + sqlite的方式,可以方便的对redis实例的内存情况进行静态的分析。整个过程也比较简单,获取到rdb之后

rdb -c memory dump.rdb > memory.csv;
sqlite3 memory.db
sqlite> create table memory(database int,type varchar(128),key varchar(128),size_in_bytes int,encoding varchar(128),num_elements int,len_largest_element varchar(128));
sqlite>.mode csv memory
sqlite>.import memory.csv memory

即可

实际使用中,发现过一个List积攒了10多G的内容,也发现过43M以上的string类型的value, 往往不仅能解答用户的疑惑,而且能够帮助用户排除业务中潜在的风险点,找到业务性能瓶颈。

总的来说,整个分析的过程简单而实用,是每一个Redis的用户都非常值得掌握的一个方法。

Redis内存分析方法相关推荐

  1. 内存分析_Redis内存爆炸增长?你需要知道这一套Redis内存分析方法

    Redis Redis介绍 NoSQL Redis是当前比较热门的NOSQL数据库之一,和Memcache一样,数据都是缓存在计算机内存中.完全开源免费,遵守BSD协议,是一个高性能的key-valu ...

  2. golang 编写的在线redis 内存分析工具 rma4go

    redis 内存分析工具 rma4go redis是一个很有名的内存型数据库,这里不做详细介绍.而rma4go (redis memory analyzer for golang) 是一个redis的 ...

  3. redis 内存分析工具 `rma4go`

    redis 内存分析工具 rma4go redis是一个很有名的内存型数据库,这里不做详细介绍.而rma4go (redis memory analyzer for golang) 是一个redis的 ...

  4. 一个golang编写的redis内存分析工具rma4go

    redis 内存分析工具 rma4go 简介 redis是一个很有名的内存型数据库,这里不做详细介绍.而rma4go (redis memory analyzer for golang) 是一个red ...

  5. redis 内存分析工具 RMA 使用

    RMA 介绍 RMA 是一个控制台工具,用于实时扫描 Redis 密钥空间并按密钥模式聚合内存使用情况统计信息.您可以使用此工具而无需在生产服务器上进行维护.您可以按所有或选定的 Redis 类型进行 ...

  6. redis内存分析工具rdbtools

    当Redis的内存已经快满的时候,我们能做什么呢? 最直接的方法就是分析一下Redis内存的构成,看是哪些键比较大,或者比较多,然后考虑一下对应的功能能不能优化,例如减少超时时间,例如不必要的数据不用 ...

  7. Redis 内存分析神器

    RDR 简介 RDR 是解析 redis rdbfile 工具.与redis-rdb-tools相比,RDR 是由golang 实现的,速度更快(5GB rdbfile 在我的PC上大约需要2分钟). ...

  8. Redis内存分析工具

    2019独角兽企业重金招聘Python工程师标准>>> RdbTools是一个由于分析Redis dump.rdb文件的工具,有以下功能: 生成所有数据库和key的内存分析报告 把d ...

  9. Redis内存分析工具之redis-rdb-tools的安装与使用

    操作系统:Centos7    1.redis-rdb-tools工具是用python语言编写的,所以首先需要安装python: 安装: (1)安装libffi-devel: yum -y insta ...

  10. 20201129_091.实例方法_内存分析方法调用过程_dir()_isinstance

    实例方法 实例方法是从属于实例对象的方法.实例方法的定义格式如下: def 方法名(self [, 形参列表]):函数体 方法的调用格式如下: 对象.方法名([实参列表]) ps:老师说实例方法本质上 ...

最新文章

  1. delphi 中怎么知道某一个月有多少天
  2. SAP and ABAP Memory总结
  3. oracle之基本的过滤和排序数据
  4. cad在线转低版本_【设计专业干货】史上最齐全的CAD大全
  5. 康熙通宝铜钱值多少钱?
  6. 华农2012年java答案_2012年计算机二级Java应用章节练习题及答案
  7. radius服务器连接无线网络,验证RADIUS服务器连接用测验AAA RADIUS命令
  8. 正负数据如何归一化_数据归一化方法大全
  9. linux中 qt安装教程视频,Linux 下QT安装教程
  10. poi导出excel报错Failed to read zip entry source
  11. 人工智能统计大数据带动数据时代
  12. 阴阳师服务器维护内容,阴阳师8月1日维护内容介绍_友人帐弈鬼切内容介绍_3DM手游...
  13. SQLServer笔试题
  14. 盛迈坤电商:拼多多推广数据多久会显示
  15. 兆骑科创创客大赛,招商引资,招才引智,招企引税
  16. Excel VBA 打开百度网页输入关键字并搜索
  17. android studio manifest merger failed,Android Studio报错Manifest merger failed with multiple errors...
  18. 解决屏蔽流氓蜘蛛抓取,如MJ12bot 、DotBot 、BLEXBot 、PetalBot 、DataForSeoBot
  19. 关于音乐制作的一些网站
  20. API登录接口文档事例

热门文章

  1. 输出halloword
  2. mysql5.7.23安装详细过程
  3. spring 多线程 写入数据库 和 写入 xml文件
  4. 【BZOJ2095】[Poi2010]Bridges 动态加边网络流
  5. Jmeter查看结果树
  6. django通用视图(类方法)
  7. 闫墨杰415知识点总结
  8. JDK_Proxy_InvocationHandler_动态代理
  9. C语言--(四)常用运算符
  10. zabbix详解(五)——zabbix配置文件详解