我的redis實例似乎越來越大,我想知道我在那裏有多個數據庫會消耗多少內存。 Redis的'INFO
命令只是顯示了每個數據庫的總大小和密鑰數量,這並不能給我很多見解......所以,在監視Redis服務器時給我提供更多信息的任何工具/想法都將值得讚賞。Redis:顯示密鑰的數據庫大小/大小
Redis文檔不會顯示任何可以返回某些鍵的消耗內存的命令,所以我猜如果有任何錯誤的代碼會爲redis寫入很多「垃圾」,這可能很難找到..
我的redis實例似乎越來越大,我想知道我在那裏有多個數據庫會消耗多少內存。 Redis的'INFO
命令只是顯示了每個數據庫的總大小和密鑰數量,這並不能給我很多見解......所以,在監視Redis服務器時給我提供更多信息的任何工具/想法都將值得讚賞。Redis:顯示密鑰的數據庫大小/大小
Redis文檔不會顯示任何可以返回某些鍵的消耗內存的命令,所以我猜如果有任何錯誤的代碼會爲redis寫入很多「垃圾」,這可能很難找到..
所以,我解決我自己的問題:與redis-cli
多一點的時間玩耍後,我發現,DEBUG OBJECT <key>
揭示了類似的關鍵,這是事實上的東西的serializedlength
我一直在尋找...
對於你需要彙總所有值KEYS *
這不應該是你選擇的腳本語言太難了整個數據庫...
的壞事是redis.io並不真的有很多的有關DEBUG OBJECT
。
也許你可以對db文件做一些反省。該協議相對簡單(但沒有很好記錄),所以你可以編寫一個解析器來確定哪些單個密鑰佔用了大量空間。
新建議:
您是否嘗試過使用MONITOR
看到正在寫了什麼,住在哪裏?也許你可以找到運動數據的問題。
好像有趣,但我仍然試圖找到一種簡單的方法來監視Redis在服務器上的內存消耗情況......檢查轉儲似乎更適合於調試給我,不要提到轉儲現在是一些演出! –
您應該詢問redis郵件列表。在聽到這個「最好」答案時,我非常有趣。 –
那麼已經嘗試過'INFO'和'MONITOR',但可能的主要問題是,當不看redis增長真的很大... –
您可能會發現,對Redis鍵進行採樣並按類型對它們進行分組非常有用。 Salvatore編寫了一個名爲redis-sampler的工具,該工具發出大約10000 RANDOMKEY
命令,然後在檢索到的鍵上發出TYPE
。在幾秒或幾分鐘的時間內,您應該可以獲得關鍵類型分佈的相當準確的視圖。
我已經寫了一個擴展(不幸的是沒有任何開源的,因爲它是工作相關的),通過正則表達式增加了一些內省的鍵名,讓你知道什麼樣的應用程序鍵(根據任何命名你正在使用的結構)存儲在Redis中。結合redis-sampler的更一般的輸出,這應該給你一個關於發生了什麼的非常好的概念。
Tks,實際上幫助我超過了'redis-cli --bigkeys' – nmat
命令行「redis-cli --bigkeys」很棒! –
看看這個項目,它會根據正則表達式和前綴輸出一些有趣的關於鍵空間的統計信息。它使用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大小,甚至可以根據前綴進行。
您可以使用。淨應用https://github.com/abhiyx/RedisSizeCalculator 計算Redis的密鑰的大小,
請隨時給您的反饋從意見相同
的解決方案值得它自己的答案:
redis-cli --bigkeys
序列化的長度是整個對象的大小,以字節爲單位? – raffian
@RaffiM:在我看來,它是,但我還沒有找到它的任何文檔... –
@BernhardVallant,謝謝你的回答。我繼續編寫了一個快速腳本,以人們可讀的格式打印所有的鍵和它們的大小。以爲我會分享。 :) https://gist.github.com/epicserve/5699837 – Brent