Redis內存分析方法


一般會采用 bgsave 生成 dump.rdb 文件,再結合 redis-rdb-tools 和 sqlite 來進行靜態分析。

BGSAVE:在后台異步(Asynchronously)保存當前數據庫的數據到磁盤。

BGSAVE 命令執行之后立即返回 OK ,然后 Redis fork 出一個新子進程,原來的 Redis 進程(父進程)繼續處理客戶端請求,而子進程則負責將數據保存到磁盤,然后退出。

生成內存快照:redis-rdb-tools 是一個 python 的解析 rdb 文件的工具,在分析內存的時候,主要用它生成內存快照。

redis-rdb-tools 安裝:

使用 PYPI 安裝:

pip install rdbtools

使用 源碼安裝:

git clone https://github.com/sripathikrishnan/redis-rdb-tools
cd redis-rdb-tools
sudo python setup.py install

使用 redis-rdb-tools 生成內存快照:

rdb -c memory dump.rdb > memory.csv

生成 CSV 格式的內存報告。包含的列有:數據庫 ID,數據類型,key,內存使用量(byte),編碼。內存使用量包含 key、value 和其他值。

內存使用量是理論上的近似值,在一般情況下,略低於實際值。

[ares:~/Desktop$head memory.csv
database,type,key,size_in_bytes,encoding,num_elements,len_largest_element
0,string,trade.coupon.id:653601465,112,string,8,8
0,string,trade.coupon.id:631354838,112,string,8,8
0,string,trade.coupon.id:632477800,112,string,8,8
0,string,trade.coupon.id:620802294,112,string,8,8
0,string,trade.coupon.id:631432959,112,string,8,8
0,string,trade.coupon.id:632933399,112,string,8,8
0,string,trade.coupon.id:632117725,112,string,8,8
0,string,trade.coupon.id:634240609,112,string,8,8
0,string,trade.coupon.id:646317603,112,string,8,8

注:若csv文件不大,可直接用相關軟件打開,以size_in_bytes列排序,可以看到大致內存使用。

使用SQLite分析內存快照:

SQLite版本必須是3.16.0以上。

導入memory.csv數據庫:

$sqlite3 memory.db
SQLite version 3.19.3 2017-06-27 16:48:08
Enter ".help" for usage hints.
sqlite> create table memory(database int,type varchar(128),key varchar(128),size_in_bytes int,encoding varchar(128),num_elements int,len_largest_element varchar(128));
sqlite> .mode csv memory
sqlite> .import memory.csv memory

數據導入后,可以隨處理:

查詢key總數:

sqlite> select count(*) from memory;
31143847

查詢key總占用內存:

sqlite> select sum(size_in_bytes) from memory;
17391950414.0

查詢內容占用最高的幾個key:

sqlite> select key,size_in_bytes from memory order by size_in_bytes desc limit 10;
key,size_in_bytes
public.xx.xx:xx,7860169636
public.xx.xx:xx,3043206524
public.xx.xx:xx,1866022916
public.xx.xx:xx,420931316
public.xx.xx:idxx171118172
xx,162984940
xx,133443892
public.xx.xx:xx,80925132
public.xx.xx:xx,28340356

可以看到占用內存較高的key,做相應處理即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM