美文网首页
Redis内存分析过程

Redis内存分析过程

作者: 池西西 | 来源:发表于2019-04-15 12:39 被阅读0次

    现象:发现设置了缓存,但是很快就失效了,使用Redis可视化工具(RedisDesktopManager)查看key-value的存储情况,发现还没到过期时间,大批的key-value对被移除掉了。查看内存的使用情况,发现内存占用很高,几乎吃光了所有内存。

    分析过程:

          内存大量的被占用,需要分析当前情况下有哪些键值对占用了大量的内存, 由于直接一个个看不便于找出每个键值对具体的内存使用情况,于是我采用 bgsave 生成 dump.rdb 文件,再结合 redis-rdb-tools 和 sqlite 来进行静态分析。

    以下是内存分析的过程:
    1. BGSAVE:在后台异步(Asynchronously)保存当前数据库的数据到磁盘。

        BGSAVE 命令执行之后立即返回 OK ,然后 Redis fork 出一个新子进程,原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。

    生成的dump.rdb文件路径:可以连接到redis之后,使用CONFIG GET dir命令找到redis的根目录,一般文件默认存在该路径下。

    2. 因为我们的redis是用k8s容器部署的,所以在容器内生成dump.rdb文件后,需要把它从容器内拷出来到指定目录,使用如下命令,(如果直接在服务器上部署可直接跳过该步骤):

    kubectl cp -n kube-system redis-release-master-0:/bitnami/redis/data/dump.rdb filepath

    3.生成内存快照:redis-rdb-tools 是一个 python 的解析 rdb 文件的工具,在分析内存的时候,主要用它生成内存快照。

    redis-rdb-tools 安装:

    1)使用 PYPI 安装:

    pip install rdbtools

    2)使用 源码安装:

    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 和其他值。

    内存使用量是理论上的近似值,在一般情况下,略低于实际值。

    注:若csv文件不大,可直接用相关软件打开,以size_in_bytes列排序,可以看到大致内存使用。

    可以看到最大的一条数据占用了将近800M的内存空间,现在我们就可以主要针对占用内存较大的缓存数据做相应的优化了。

    相关文章

      网友评论

          本文标题:Redis内存分析过程

          本文链接:https://www.haomeiwen.com/subject/yucuwqtx.html