2011-10-03 95 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