天天看點

Redis記憶體分析方法

線上經常遇到使用者想知道自己redis執行個體中資料的記憶體分布情況。

為了不影響線上執行個體的使用,我們一般會采用bgsave生成dump.rdb檔案,再結合redis-rdb-tools和sqlite來進行靜态分析。

自建redis可在用戶端執行bgsave生成rdb檔案。

阿裡雲資料庫redis版可以在控制台上可以進行資料備份和下載下傳的操作,下載下傳後的資料為rdb格式檔案。

步驟詳見下圖:

Redis記憶體分析方法

redis-rdb-tools是一個python的解析rdb檔案工具, 主要有一下三個功能:

生成記憶體快照

轉儲成json格式

使用标準的diff工具比較兩個dump檔案

在分析記憶體的使後,我們主要用到它的生成記憶體快照功能。

redis-rdb-tools有兩種安裝方式,任選其一即可。

使用pypi安裝

從源碼安裝

生成記憶體快照的指令為:

生成csv格式的記憶體報告。包含的列有:資料庫id,資料類型,key,記憶體使用量(byte),編碼。記憶體使用量包含key、value和其他值。

注意:記憶體使用量是理論上的近似值,在一般情況下,略低于實際值。

memory.csv例子:

sqlite,是一款輕型的資料庫。我們可以将前面生成的csv導入到資料庫中之後,就可以利用sql語句很友善的對redis的記憶體資料進行各種分析了。

導入方法:

資料導入以後,接下來想怎麼分析就怎麼分析了,舉幾個簡單的例子:

查詢key個數

查詢總的記憶體占用

查詢記憶體占用最高的10個key

查詢成員個數1000個以上的list

通過使用redis-rdb-tools + sqlite的方式,可以友善的對redis執行個體的記憶體情況進行靜态的分析。整個過程也比較簡單,擷取到rdb之後

即可

實際使用中,發現過一個list積攢了10多g的内容,也發現過43m以上的string類型的value, 往往不僅能解答使用者的疑惑,而且能夠幫助使用者排除業務中潛在的風險點,找到業務性能瓶頸。

總的來說,整個分析的過程簡單而實用,是每一個redis的使用者都非常值得掌握的一個方法。