2011-10-03 50 views
63

我的redis实例似乎越来越大,我想知道我在那里有多个数据库会消耗多少内存。 Redis的'INFO命令只是显示了每个数据库的总大小和密钥数量,这并不能给我很多见解......所以,在监视Redis服务器时给我提供更多信息的任何工具/想法都将值得赞赏。Redis:显示密钥的数据库大小/大小

Redis文档不会显示任何可以返回某些键的消耗内存的命令,所以我猜如果有任何错误的代码会为redis写入很多“垃圾”,这可能很难找到..

回答

81

所以,我解决我自己的问题:与redis-cli多一点的时间玩耍后,我发现,DEBUG OBJECT <key>揭示了类似的关键,这是事实上的东西的serializedlength我一直在寻找...

对于你需要汇总所有值KEYS *这不应该是你选择的脚本语言太难了整个数据库...

的坏事是redis.io并不真的有很多的有关DEBUG OBJECT

+1

序列化的长度是整个对象的大小,以字节为单位? – raffian

+0

@RaffiM:在我看来,它是,但我还没有找到它的任何文档... –

+14

@BernhardVallant,谢谢你的回答。我继续编写了一个快速脚本,以人们可读的格式打印所有的键和它们的大小。以为我会分享。 :) https://gist.github.com/epicserve/5699837 – Brent

3

也许你可以对db文件做一些反省。该协议相对简单(但没有很好记录),所以你可以编写一个解析器来确定哪些单个密钥占用了大量空间。


新建议:

您是否尝试过使用MONITOR看到正在写了什么,住在哪里?也许你可以找到运动数据的问题。

+0

好像有趣,但我仍然试图找到一种简单的方法来监视Redis在服务器上的内存消耗情况......检查转储似乎更适合于调试给我,不要提到转储现在是一些演出! –

+0

您应该询问redis邮件列表。在听到这个“最好”答案时,我非常有趣。 –

+0

那么已经尝试过'INFO'和'MONITOR',但可能的主要问题是,当不看redis增长真的很大... –

7

您可能会发现,对Redis键进行采样并按类型对它们进行分组非常有用。 Salvatore编写了一个名为redis-sampler的工具,该工具发出大约10000 RANDOMKEY命令,然后在检索到的键上发出TYPE。在几秒或几分钟的时间内,您应该可以获得关键类型分布的相当准确的视图。

我已经写了一个扩展(不幸的是没有任何开源的,因为它是工作相关的),通过正则表达式增加了一些内省的键名,让你知道什么样的应用程序键(根据任何命名你正在使用的结构)存储在Redis中。结合redis-sampler的更一般的输出,这应该给你一个关于发生了什么的非常好的概念。

+6

Tks,实际上帮助我超过了'redis-cli --bigkeys' – nmat

+3

命令行“redis-cli --bigkeys”很棒! –

12

看看这个项目,它会根据正则表达式和前缀输出一些有趣的关于键空间的统计信息。它使用DEBUG OBJECT命令并扫描数据库,识别密钥组并估计它们占用的空间的百分比。

https://github.com/snmaynard/redis-audit

输出看起来是这样的:

Summary 

---------------------------------------------------+--------------+-------------------+--------------------------------------------------- 
Key            | Memory Usage | Expiry Proportion | Last Access Time          
---------------------------------------------------+--------------+-------------------+--------------------------------------------------- 
notification_3109439        | 88.14%  | 0.0%    | 2 minutes        
user_profile_3897016        | 11.86%  | 99.98%   | 20 seconds 
---------------------------------------------------+--------------+-------------------+--------------------------------------------------- 

或这这一个: https://github.com/sripathikrishnan/redis-rdb-tools其通过dump.rdb文件离线分析确实对整个密钥空间进行全面分析。这个也很好。它可以为你的数据库中的条目提供avg/min/max大小,甚至可以根据前缀进行。

18

的解决方案值得它自己的答案:

redis-cli --bigkeys