redis 内存分析

一、首先安装pip(最好yum安装,python安装的版本在安装rdbtools时报错)

yum install -y pip
或者编译安装
wget
"https://pypi.python.org/packages/source/p/pip/pip1.5.4.tar.gz#md5=834b2904f92d46aaa333267fb1c922bb" --no-check-certificat
进入文件夹 python setup.py
install

二、安装redis-rdb-tools

1.pypi安装

pip install rdbtools

2.编译安装

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

三、使用redis-rdb-tools

1.开启RDB持久化或者手动生成RDB文件

redis> BGSAVE

2.用rdb生成内存快照

rdb -c memory dump.rdb > memory.csv

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

3.分析内存报告

由于分析报告时csv格式,所以可以有多种分析方式,推荐sqlite和Mysql

1.sqlite分析

sqlite是python的软件库,sqlite无需配置,也没有进程(线程),本身就是个文件,而且支持SQL语句

(1)导入分析报告

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),expiry varchar(50));
sqlite>.mode csv #逗号分隔的值
sqlite>.import memory.csv memory

(2)查看分析报告

查询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 ;

2.mysql分析

查看分析与sqlite并无差别,主要差别在于导入(mysql可以略错误,sqlite不能)

create table memory(db int,type varchar(128),keey varchar(128),size_in_bytes int,encoding varchar(128),num_elements int,len_largest_element varchar(128),expiry varchar(50));
LOAD DATA INFILE '/logs/mysql_load/memory.csv' INTO TABLE memory character set latin1 ignore 1 lines;

创建表的时候,由于database,key是敏感词,所以我把database,key这l两列改成了db,keey

我在load data时有字符集的报错,所以该改成了latin1,必要的时候,在没有影响到主要的size_in_bytes数据时,可以添加ignore跳过错误

LOAD DATA INFILE '/logs/mysql_load/memory.csv' ignore INTO TABLE memory ignore 1 lines;
原文地址:https://www.cnblogs.com/Knight7971/p/10156137.html