利用redis-rdb-tools分析redis内存
Posted 那个天真的人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用redis-rdb-tools分析redis内存相关的知识,希望对你有一定的参考价值。
前言 我们经常会利用redis作为缓存的工具,然而为了使redis更高效,我们一般不会开启VM模式,但运行久了之后,随着redis占用内存的不断膨胀,我们常需分析redis内存现状,哪些key占用了很多的内存,有没有没用的key没有清除掉。利用 redis-rdb-tools和sqlite3,我们可以分析redis的内存情况.环境 本示例使用Ubuntu 系统。
实验流程 1. 利用redis的持久化机制,得到近期redis内存数据的一个备份文件,如取名:memory.rdb 2. 安装 pip apt-get install python-pip 3. 安装 rdbtool pip install rdbtool 4. 利用 rdbtool把 memory.rdb 转换为 memory.csv rdb -c memory memory.rdb > memory.csv 我使用的 memory.rdb高达10G,使用了大概1小时才转换完成,所以转换过程要耐心等待,可以使用top查看cpu消耗情况,一般会打满cpu。
5. 安装 sqlite3 apt-get install sqlite3
6. 创建一个库: sqlite3 memory.db
7. 创建 memory表 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));
继续执行: select count(*) from memory; 如果返回0表示创建成功了
8. 导入 memory.csv 到 memory表 sqlite>.import /mnt/data/redis/test/memory.csv memory 这时候发现出错了:
查看csv文件的内容,发现csv是以英文,进行分隔的 而sqlite3默认使用 | 作为分隔符,使用 .show 命令可以查看, 使用 .separator , 进行修改:
删除旧表: sqlite> drop table memory; 然后利用上面的建表语句重新建好表,再次导入 如果还出现了错误,比如说期望的是7列,但是csv却提供了8列,可以使用 unix2dos工具先对 csv文件进行转换。
到这里,就导入成功了,可以使用sql语句进行查询,比如查询最占内存的10个key 然后就可以进行后续的优化处理了.
总结 得到csv文件后,也可以直接下载到本地直接打开查看,直接在文件中进行排序,这个就因人喜欢而异了,不过用sqlite3操作会比较方便。
最后的参考讲了本篇的方法,不过在操作的时候遇到了一些问题,所以这里新写了这篇文章说明。
参考
https://yq.aliyun.com/articles/62899
以上是关于利用redis-rdb-tools分析redis内存的主要内容,如果未能解决你的问题,请参考以下文章