如何检测出redis的哪些key在消耗内存

今天发现测试环境Redis进程被OOM killer了,所以,直觉就是优先找出消耗内存的罪魁祸首key。

redis-rdb-tools 是专门用来干这活的,我们先来了解下:

 一、rdbtools工具介绍

源码地址:https://github.com/sripathikrishnan/redis-rdb-tools/

redis-rdb-tools 是一个 用python开发的用于解析 rdb 文件的工具,在解析的时候,它会生成类似于xml sax解析器的事件,在内存检测方面非常有效

它主要有以下三个功能:

  • 生成内存快照

  • 转储成 json 格式

  • 使用标准的 diff 工具比较两个 dump 文件

 市面上有用其他语言开发的类似的工具,Rdbtools用Python开发,安装时最好用3以上版本,我这边用的是3.6+,你可以从https://rdbtools.com 中了解到更多的关于管理redis的界面RedisInsight,商业支持,和其他企业级特性

如何检测出redis的哪些key在消耗内存_第1张图片

如何安装:

1.python-lzf 是可选安装,但强烈建议你安装,因为它可以加速解析的过程

2.redis-py 是可选的,只是在跑测试的时候有用 

建议用pip3安装

pip3 install rdbtools python-lzf

生成内存报告,列出大小大于128字节的,内存占用最大的前10的key的详情,可惜未有经过排序,并生成redis.csv文件

注意:内存使用量是近似的。在一般情况下,略低于实际值。可以根据key或数据库ID或数据类型对报告的内容进行过滤。
内存报告有助于检测是否是应用程序逻辑导致的内存泄露,也有助于优化reids内存使用情况。

 ./rdb -c memory -l 10 /data/redis/6386/dump.rdb --bytes 128 >/tmp/redis.csv

结果为: 

database type key size_in_bytes encoding num_elements len_largest_element expiry
0 hash user_record:251932 26940 hashtable 604 13  
0 string record:277 6232 string 5529 5529 2037-06-26T13:43:49.117000
0 string record:278 6232 string 5544 5544 2037-06-26T13:59:38.661000
0 string record:420 6232 string 5522 5522 2037-03-19T13:33:49.059000
0 string record:526 6232 string 5687 5687 2037-03-26T14:30:06.601000
0 string record:244 7256 string 6276 6276 2037-06-23T15:02:49.080000
0 string record:3151 8280 string 7872 7872 2039-09-01T13:21:30.615000
0 string record:445 10328 string 8374 8374 2037-08-18T08:06:48.196000
0 string record:447 10328 string 8375 8375 2037-08-18T08:16:48.038000
0 hash user_record:126661 25476 hashtable 543 13  

输出字段说明:

database :key在redis的db

type :key类型

key :key值

size_in_bytes :key的内存大小(byte)

encoding :value的存储编码形式

num_elements :key中的value的个数

len_largest_element :key中的value的最大长度

expiry :key过期时间

按键值大小排序(TODO...)

awk -F',' '{print $4,$2,$3,$1}' /tmp/redis.csv | sort  > /tmp/redis_sort.csv

如何输出某个key的占用大小?

 ./redis-memory-for-key -p 6386 -a ooxx user_record:251932 

 输出:

Key                             user_record:251932
Bytes                           26940.0
Type                            hash
Encoding                        hashtable
Number of Elements              604
Length of Largest Element       13

 

RedisTimeSeries是一个Redis模块,向Redis添加了时间序列数据结构。

他有如下的功能:

在此处 阅读有关v1.0 GA功能的更多信息 。

  • 高容量插入,低延迟读取
  • 按开始时间和结束时间查询
  • 任何时间段的汇总查询(最小,最大,平均,总和,范围,计数,第一,最后,STD.P,STD.S,Var.P,Var.S)
  • 可配置的最大保留期限
  • 下采样/压缩-自动更新汇总的时间序列
  • 次要索引-每个时间序列都有标签(字段值对),可以按标签查询

 下载:https://redislabs.com/download-center/modules/

启动:

redis-server /data/redis/6385/6385.conf --loadmodule /usr/local/redis-5.0.9/redistimeseries.so

这样

你可能感兴趣的:(Redis,游戏脚本,redis,运维)