一、问题提出
有一个生产系统的Redis实例内存使用超限引发报警,需要查看各个key所使用的内存分布情况,以便采取进一步的措施。
二、安装RDR
Redis原生并没提供查看单个Key的内存占用情况的命令。经过简单快速地调研,决定试一下RDR(Redis Data Reveal),主要原因是想体验一下其图形化的表示。RDR是用go语言开发的,安装过程如下。
1. 安装go
代码语言:javascript复制yum -y install go
# 确认go语言环境和版本
go env
go version
2. 一键式自动获取、编译RDR
代码语言:javascript复制go get github.com/xueqiu/rdr
结果是生成一个名为rdr的可执行文件,只需要将该可执行文件直接拷贝到其它机器上执行,不再依赖于任何其它环境。
三、用rdr查看key的内存使用情况
代码语言:javascript复制/root/go/bin/rdr show dump.rdb
我们的rdb文件大小有3G,600多万个key,在我的虚拟机上执行分析的时间约为5分20秒。按返回的提示,在浏览器中查看结果如下。
RDR的工作方式是对rdb文件进行解析,只要有rdb文件就行,并不需要Redis实例。RDR 可以非常方便的对 Reids 的内存进行分析,了解一个 Redis 实例里都有哪些 key,哪类 key 占用的空间是多少,最耗内存的 key 有哪些,占比如何,非常直观。
参考:
- Redis大key图形化统计及展示
- redis占用内存诊断过程
- Centos Linux 使用Yum安装Go和配置环境