redis内存分析
内存分析
线上经常遇到用户想知道自己 Redis 实例中数据的内存分布情况。为了不影响线上实例的使用,我们一般会采用 bgsave 生成 dump.rdb 文件,再结合 redis-rdb-tools 和 sql 来进行静态分析。总的来说,整个分析的过程简单而实用,是每一个 Redis 的用户都非常值得掌握的一个方法。
创建备份
Redis 可在客户端执行 bgsave
生成 rdb 文件
1 | 127.0.0.1:6401> bgsave |
redis-rdb-tools
redis-rdb-tools 是一个 python 的解析 rdb 文件的工具,主要有以下三个功能:
- 生成内存快照
- 转储成 json 格式
- 使用标准的 diff 工具比较两个 dump 文件
在分析内存的使后,我们主要用到它的生成内存快照功能。
安装
1 | git clone https://github.com/sripathikrishnan/redis-rdb-tools |
或
1 | pip install rdbtools |
生成内存快照
1 | rdb -c memory dump.rdb > memory.csv |
生成 CSV 格式的内存报告。包含的列有:数据库 ID,数据类型,key,内存使用量(byte),编码。内存使用量包含 key、value 和其他值。
1 | [root@mha-manager data]# rdb -c memory dump.rdb >memory.csv |
分析内存快照
将csv导入sqllite:
1 | [root@mha-manager data]# sqlite3 memory.db #在当前目录创建memory.db库 |
接下来就可以使用sql进行分析了。
查询key个数
1 | sqlite> select count(*) from memory; |
查询总的内存占用
1 | sqlite> select sum(size_in_bytes) from memory; |
查询内存占用最高的10个 key
1 | sqlite> select * from memory order by size_in_bytes desc limit 10; |
查询成员个数1000****个以上的 list
1 | sqlite> select * from memory where type='list' and num_elements > 1000 ; |
当然也可以导入mysql分析。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ASKDBA!
评论