文档章节

redis内存分析

xxj123gogo
 xxj123gogo
发布于 2017/06/16 19:20
字数 714
阅读 44
收藏 1

内存分析

线上经常遇到用户想知道自己 Redis 实例中数据的内存分布情况。为了不影响线上实例的使用,我们一般会采用 bgsave 生成 dump.rdb 文件,再结合 redis-rdb-tools 和 sql 来进行静态分析。总的来说,整个分析的过程简单而实用,是每一个 Redis 的用户都非常值得掌握的一个方法。

创建备份

 Redis 可在客户端执行 bgsave 生成 rdb 文件

127.0.0.1:6401> bgsave
Background saving started
[root@mha-manager data]# ll /usr/local/redis-sentinel/redis1/data/
total 257808
-rw-r--r-- 1 root root 193360335 Jun 16 16:12 appendonly.aof
-rw-r--r-- 1 root root  31586138 Jun 16 18:13 dump.rdb
-rw-r--r-- 1 root root  39030784 Jun 16 18:20 memory.csv
-rw-r--r-- 1 root root       112 Jun 16 11:40 nodes-6301.conf

redis-rdb-tools

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

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

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

安装

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

pip install rdbtools

生成内存快照

rdb -c memory dump.rdb > memory.csv

生成 CSV 格式的内存报告。包含的列有:数据库 ID,数据类型,key,内存使用量(byte),编码。内存使用量包含 key、value 和其他值。

[root@mha-manager data]# rdb -c memory dump.rdb >memory.csv    
[root@mha-manager data]#
[root@mha-manager data]# ll
total 264476
-rw-r--r-- 1 root root 193360335 Jun 16 16:12 appendonly.aof
-rw-r--r-- 1 root root  31586138 Jun 16 18:13 dump.rdb
-rw-r--r-- 1 root root  45850811 Jun 16 18:21 memory.csv
-rw-r--r-- 1 root root       112 Jun 16 11:40 nodes-6301.conf
[root@mha-manager data]# head memory.csv
database,type,key,size_in_bytes,encoding,num_elements,len_largest_element
0,string,key:000004721170,224,string,128,128
0,string,key:000002669304,224,string,128,128
0,string,key:000002009281,224,string,128,128
0,string,key:000002656076,224,string,128,128
0,string,key:000002109116,224,string,128,128
0,string,key:000003224694,224,string,128,128
0,string,key:000003397629,224,string,128,128
0,string,key:000000839412,224,string,128,128
0,string,key:000001268084,224,string,128,128

分析内存快照

将csv导入sqllite:

[root@mha-manager data]# sqlite3 memory.db  #在当前目录创建memory.db库
SQLite version 3.6.20
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
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 #设置memory表的输出模式
sqlite> .import memory.csv memory #导入来自 memory.csv 文件的数据到 memory 表中

接下来就可以使用sql进行分析了。

查询key个数

sqlite> select count(*) from memory;
1018907

查询总的内存占用

sqlite> select sum(size_in_bytes) from memory;
228234616.0

查询内存占用最高的10 key

sqlite> select * from memory order by size_in_bytes desc limit 10;
database,type,key,size_in_bytes,encoding,num_elements,len_largest_element
0,string,key:000004721170,224,string,128,128
0,string,key:000002669304,224,string,128,128
0,string,key:000002009281,224,string,128,128
0,string,key:000002656076,224,string,128,128
0,string,key:000002109116,224,string,128,128
0,string,key:000003224694,224,string,128,128
0,string,key:000003397629,224,string,128,128
0,string,key:000000839412,224,string,128,128
0,string,key:000001268084,224,string,128,128

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

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

当然也可以导入mysql分析。

© 著作权归作者所有

下一篇: Redis Persistence
xxj123gogo
粉丝 0
博文 62
码字总数 83973
作品 0
其它
程序员
私信 提问
如何查看redis内存使用情况

如何查看redis内存使用情况 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。Redis的基本特点之一内存数据库,因为其数据是放在内存中的所以...

arvin_qin
2017/05/26
0
0
Redis内存分析工具

RdbTools是一个由于分析Redis dump.rdb文件的工具,有以下功能: 生成所有数据库和key的内存分析报告 把dump文件转换成JSON文件 用标准的diff工具比较2个dump文件 安装rdbtools 通过pip安装 ...

Joey_T
2015/12/25
860
0
Go 实现的 Redis 内存分析工具 - go-redis-memory-analysis

这是一个 Go 语言实现的 Redis 内存分析工具:用于找出占用内存较多的 Key,将结果导出至 csv 文件。 示例代码 通过直接连接到 redis 来分析 key analysis := NewAnalysis()//Open redis: 1...

好好先森V5
2018/07/11
482
0
Redis压缩列表原理与应用分析

摘要 Redis是一款著名的key-value内存数据库软件,同时也是一款卓越的数据结构服务软件。它支持字符串、列表、哈希表、集合、有序集合五种数据结构类型,同时每种数据结构类型针对不同的应用...

Float_Luuu
2016/07/20
3.3K
0
【Redis】 key 很少但是used_memory很大

环境: CentOS 6.5 Redis 2.8 问题描述: 最近几天有一个使用了俩年的redis实例的内存使用情况的增长速率很是诡异,突然从1G增长到了4个多G,一开始认为是因为新项目上线有在使用,但是询问了开发...

liuhuang9496
2017/11/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
今天
5
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
今天
8
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
12
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
16
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部