Redis 内存分析工具
一、bigKeys
bigKeys
是 redis-cli 自带的命令选项,可以对整个Redis实例进行扫描,找出较大的Key。
使用示例
$ redis-cli --bigkeys |
命令说明
- 该命令使用scan方式对key进行统计,所以使用时无需担心对redis造成阻塞。
- 输出大概分为两部分,summary之上的部分,只是显示了扫描的过程。summary部分给出了每种数据结构中最大的Key。
- 统计出的最大key只有string类型是以字节长度为衡量标准的。list,set,zset等都是以元素个数作为衡量标准,不能说明其占的内存就一定多。所以,如果你的Key主要以string类型存在,这种方法就比较适合。
更多关于bigKeys的说明可以参考这里。
二、Redis Debug Object
Redis Debug Object 命令是一个调试命令,它不应被客户端所使用。
基本语法:
127.0.0.1:6379> DEBUG OBJECT key |
使用示例
127.0.0.1:6379> DEBUG OBJECT my_pc |
关于输出的项的说明:
- Value at:key的内存地址
- refcount:引用次数
- encoding:编码类型
- serializedlength:序列化长度
- lru_seconds_idle:空闲时间 关于refcount, encoding, lru_seconds_idle的更详细解释可以参考这里。
三、Redis RDB Tools
Rdbtools 是 Redis 的 dump.rdb 文件的解析器。解析器生成类似于 xml sax 解析器的事件,并且在内存方面非常有效。
此外,rdbtools 提供实用程序:
- 跨所有数据库和键生成数据的内存报告
- 将转储文件转换为 JSON
- 使用标准差异工具比较两个转储文件
安装 rdbtools
先决条件:
- python-lzf 是可选的,但强烈建议加快解析速度。
- redis-py 是可选的,只需要运行测试用例。
- 通过PyPI安装(推荐):
pip install rdbtools python-lzf |
- 通过源码安装:
git clone https://github.com/sripathikrishnan/redis-rdb-tools |
使用示例
生成内存报告
使用 -c memory
选项生成一个 CSV 报告, 其中包含该键使用的大致内存。--bytes C
和 --largest N
可用于将输出限制为大于 C 字节的键或 N 个最大的键。
$ rdb -c memory /var/redis/6379/dump.rdb --bytes 128 -f memory.csv |
生成的 CSV 具有以下列 - 生成的 CSV 具有以下列 - 数据库编号、数据类型、Key、以字节为单位的内存和 RDB 编码类型。内存使用包括键、值和任何其他开销。
请注意,内存使用量是近似值。一般来说,实际使用的内存会略高于报告的内存。
您可以根据 key 或 数据库编号 或 数据类型 过滤报告。
查找单个Key使用的内存
有时只想查找特定 Key 使用的内存,而在转储文件上运行整个内存报告非常耗时。在这种情况下,可以使用 redis-memory-for-key
命令:
$ redis-memory-for-key person:1 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 DevOps Technology Stack!
评论