Redis内存分析方法

一般会采用 bgsave 生成 dump.rdb 文件,再结合 redis-rdb-tools 和 sqlite 来进行静态分析。

BGSAVE:在后台异步(Asynchronously)保存当前数据库的数据到磁盘。

BGSAVE 命令执行之后立即返回 OK ,然后 Redis fork 出一个新子进程,原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。

生成内存快照:redis-rdb-tools 是一个 python 的解析 rdb 文件的工具,在分析内存的时候,主要用它生成内存快照。

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 和其他值。

内存使用量是理论上的近似值,在一般情况下,略低于实际值。

[ares:~/Desktop$head memory.csv
database,type,key,size_in_bytes,encoding,num_elements,len_largest_element
0,string,trade.coupon.id:653601465,112,string,8,8
0,string,trade.coupon.id:631354838,112,string,8,8
0,string,trade.coupon.id:632477800,112,string,8,8
0,string,trade.coupon.id:620802294,112,string,8,8
0,string,trade.coupon.id:631432959,112,string,8,8
0,string,trade.coupon.id:632933399,112,string,8,8
0,string,trade.coupon.id:632117725,112,string,8,8
0,string,trade.coupon.id:634240609,112,string,8,8
0,string,trade.coupon.id:646317603,112,string,8,8

注:若csv文件不大,可直接用相关软件打开,以size_in_bytes列排序,可以看到大致内存使用。

使用SQLite分析内存快照:

SQLite版本必须是3.16.0以上。

导入memory.csv数据库:

$sqlite3 memory.db
SQLite version 3.19.3 2017-06-27 16:48:08
Enter ".help" for usage hints.
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;
31143847

查询key总占用内存:

sqlite> select sum(size_in_bytes) from memory;
17391950414.0

查询内容占用最高的几个key:

sqlite> select key,size_in_bytes from memory order by size_in_bytes desc limit 10;
key,size_in_bytes
public.xx.xx:xx,7860169636
public.xx.xx:xx,3043206524
public.xx.xx:xx,1866022916
public.xx.xx:xx,420931316
public.xx.xx:idxx171118172
xx,162984940
xx,133443892
public.xx.xx:xx,80925132
public.xx.xx:xx,28340356

可以看到占用内存较高的key,做相应处理即可。

原文地址:https://www.cnblogs.com/aresxin/p/9014617.html

时间: 2024-08-29 10:51:45

Redis内存分析方法的相关文章

redis内存分析

redis内存分析和清理 web项目中经常会使用redis作为缓存,当项目了运行一段时间后,由于不恰当的使用方法和需求迭代频繁,导致redis内存快速增长,这时就需要对redis的key进行分析,删掉无用的key以节省空间 使用redis自带的命令查看 使用redis自带的info keyspace命令可以查看简略的key分布情况 使用rdbtools工具分析 rdbtools是用python开发的第三方工具,主要作用有: 1.生成csv分析报告 rdb -c memory dump.rdb >

redis内存优化方法

先来认识2个redis配置参数 hash-max-ziplist-entries : hash内部编码压缩列表的最大值,默认512 hash-max-zipmap-value : hash内部编码压缩列表单个key的最大值,默认64字节. 这是hash的配置,list,set,zset也有类似的配置参数. 先说结论:总结redis节约内存的方法. 1,使用对象共享池优化小整数对象. 2,数据优先使用整数,比字符串更节省空间. 3,操作优化.尽量避免字符串的追加操作,因为字符串存在预分配机制.追加

redis 内存优化

最近做的一个系统大量使用redis,我们将大量的用户信息存放在redis中,内存一申请就是几百G,体量也是相当庞大.所以我们也在不断的想方法优化减少redis的内存使用,把我们的优化实践也分享出来. 采用Hash代替<K,V>键值对存储 因为是存放用户维度的数据,用户id(uid)往往会作为key,而一个用户会有多个信息,比如年龄,生日等等,比较容易想到的存储结构会采用Hash,将一个用户的多个信息作为hash里的不同field来存放 善用Hash,List,ZSet的ziplist压缩特性

性能测试—瓶颈分析方法

1.内存分析方法 内存分析用于判断系统有无内存瓶颈,是否需要通过增加内存等手段提高系统性能表现. 内存分析需要使用的计数器:Memory类别和Physical Disk类别的计数器.内存分析的主要方法和步骤: (1)首先查看Memory\Available Mbytes指标 如果该指标的数据比较小,系统可能出现了内存方面的问题,需要继续下面步骤进一步分析. 注: 在UNIX/LINUX中,对应指标是FREE(KB) (2)注意Pages/sec.Pages Read/sec和Page Fault

性能测试之操作系统计数器分析方法

内存分析方法: 内存分析用于判断系统有无遇到内存瓶颈,是否需要通过增加内存等手段提高系统性能表现.内存分析需要使用计数器:Memory & Physical Disk类别的计数器,以下是内存分析的主要方法和步骤 1>.查看Memory\Available Mbytes指标,该计数器是描述系统可用内存的直接指标,在对系统进行操作系统级别的内存分析时,首先通过该指标建立一个初步的印象,了解性能测试过程中系统是否仍然有足够的内存可用,如果该指标的数据比较小,系统可能出现了内存方面的问题,这时需要继

性能分析方法

1.内存分析方法 内存分析方法主要是用于判断系统有无遇到内存瓶颈,是否需要通过增加内存等手段提高系统性能表现.主要计数器包括Memory和Physical Disk类别的计数器 内存分析的主要步骤和方法如下: (1) 首先查看Memory\Available Mbytes指标 该值是用于描述系统可用内存的直接指标,在对系统进行操作系统级别的内存分析时,首先应通过该值建立一个初步的印象,了解性能系统测试过程中,系统是否仍然有足够的内存可用. 如果该指标的数据比较小,系统可能出现了内存方面的问题,此

java执行程序的内存分析系列专栏二之static变量和方法内存分析

昨天写了简单的聊了下java执行程序时简单的内存划分,今天我们接着往下聊,聊聊static变量和方法的内存分析. 1.static变量和方法的第一个特性内存分析 statiic变量和方法的第一个特性能通过类名.static变量和类名.static方法的形式调用,而普通只能对象的形式调用.但具体为什么是这样的,这得分析static变量和方法他们在内存中怎样分配的,因此在这里我首先建立一个学生类,里面有一个普通成员变量和一个静态成员变量以及一个普通方法和一个成员方法,然后建立了一个测试学生的类. 1

Eclipse中的快捷键快速生成常用代码(例如无参、带参构造,set、get方法),以及Java中重要的内存分析(栈、堆、方法区、常量池)

Eclipse中的快捷键快速生成常用代码(例如无参.带参构造,set.get方法),以及Java中重要的内存分析(栈.堆.方法区.常量池) 以上就是Eclipse中的快捷键快速生成常用代码(例如无参.带参构造,set.get方法),以及Java中重要的内存分析(栈.堆.方法区.常量池)的全部内容了,更多内容请关注:CPP学习网_CPP大学 本文固定链接:CPP学习网_CPP大学-Eclipse中的快捷键快速生成常用代码(例如无参.带参构造,set.get方法),以及Java中重要的内存分析(栈.

redis 源代码分析(一) 内存管理

一,redis内存管理介绍 redis是一个基于内存的key-value的数据库,其内存管理是很重要的,为了屏蔽不同平台之间的差异,以及统计内存占用量等,redis对内存分配函数进行了一层封装,程序中统一使用zmalloc,zfree一系列函数,其相应的源代码在src/zmalloc.h和src/zmalloc.c两个文件里,源代码点这里. 二,redis内存管理源代码分析 redis封装是为了屏蔽底层平台的差异,同一时候方便自己实现相关的函数,我们能够通过src/zmalloc.h 文件里的相