内存语义分析
测试环境redis服务出现异常, 为了排查错误对redis内存进行了分析.
分析redis内存
1) 安装redis-rdb-tools: Linux下执行: pip install rdbtools(先安装python-pip才能使用pip命令)
2) 找到redis的dump.rdb文件
3) 执行rdb -c memory dump.rdb > memory.csv
生成的memory.csv就是分析文件了.
附:
dump.rdb文件是redis快照的结果,也就是将数据库中的数据保存到硬盘,防止redis意外重启后数据丢失的。redis每次启动时,都会先去找这个文件,将里面的数据导入数据库中,如果没有找到这个文件就会重新建立一个,如果找到了,但是被清空了,对不起,你的数据也就丢失了。
- dump文件保存路径请见redis.conf:
# The filename where to dump the DB
dbfilename dump.rdb
# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
#
# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir /var/lib/redis
查看分析结果
database,type,key,size_in_bytes,encoding,num_elements,len_largest_element
0,string,cache_area_cityOfProvince_34,168,string,81,81
0,string,cache_hour_transaction_num_05-10,2672,string,2205,2205
0,string,cache_banner_app_home,384,string,291,291
0,string,cache_hour_transaction_num_05-27,1648,string,1393,1393
0,string,cache_hour_transaction_num_05-31,368,string,233,233
0,string,cache_hour_transaction_num_06-05,880,string,639,639
0,string,cache_day_play_count_05-19,1384,string,1255,1255
0,list,logstash,3319374989,quicklist,7660698,34240
0,list,watch_order_48_615,189,quicklist,1,32
...
字段含义依次为: 数据库ID,数据类型,key,内存使用量(byte),编码。内存使用量包含key、value和其他值。
分析可得, key为'logstash'的内容最大, 为3319374989字节(3165.6Mb); 远超其他正常值, 定位原因.