美文网首页大虾带着小虾米
【实战】Redis内存使用量过大问题解决

【实战】Redis内存使用量过大问题解决

作者: 路上阳光 | 来源:发表于2019-08-03 14:13 被阅读39次

今天解决一个redis内存使用量大的问题。和大家分享一下。

有一个历史遗留系统A,因为一些业务原因,申请了很大的redis内存。从40G一路加到了80G。但是仍然经常告警,达到了max_memory。

联系系统用户,删除了大量数据。查看内存,仍然处于紧张状态。

查了一些资料。

redis的内存使用构成

我们查询redis的内存使用:

info memory

used_memory Redis:分配器分配的内存量,也就是实际存储数据的内存总量

used_memory_human:以可读格式返回 Redis 使用的内存总量

used_memory_rss:从操作系统的角度,Redis进程占用的总物理内存

used_memory_peak:内存分配器分配的最大内存,代表used_memory的历史峰值

used_memory_peak_human: 以可读的格式显示内存消耗峰值

used_memory_lua:Lua引擎所消耗的内存

mem_fragmentation_ratio:used_memory_rss /used_memory比值,表示内存碎片率

mem_allocator:Redis 所使用的内存分配器。默认: jemalloc

计算公式如下:

used_memory = 自身内存+对象内存+缓冲内存+lua内存

used_rss = used_memory + 内存碎片

如下图所示:

【实战】Redis内存使用量过大问题解决

3.1.2 内存分析

1) 自身内存:一个空的Redis占用很小,可以忽略不计

2) kv内存:key对象 + value对象

3) 缓冲区:客户端缓冲区(普通 + slave伪装 + pubsub)以及aof缓冲区(比较固定,一般没问题)

4) Lua:Lua引擎所消耗的内存

内存突增常见问题

1) kv内存:bigkey、大量写入

2) 客户端缓冲区:一般常见的有普通客户端缓冲区(例如monitor命令)或者pubsub客户端缓冲区

可能出现的问题排查

1) bigkey?

redis --bigkeys:可以对redis整个 keyspace 进行统计(数据量大时采样,调用 scan 命令),寻找每种数据类型较大的 keys,给出数据统计 redis-cli --bigkeys -i 0.1 -h 127.0.0.1

2) 键值个数增加?

3) 客户端缓冲区

如果是因为缓冲区问题,会从info clients找到明显问题。重点观察是否明显的omem大于0的情况。

4) Redis的kv哈希表做了 rehash

问题解决

本次遇到的问题是客户端缓冲区问题,使用如下命令

redis-cli -c -h x.x.x.x -p 6398 -a xxxx client list | grep -v 'omem=0'

查询缓冲器非0的客户端

【实战】Redis内存使用量过大问题解决

发现有一个客户端持有了大量内存缓冲。将对应的应用重启后。内存使用量一下子降下来了。

相关文章

  • 【实战】Redis内存使用量过大问题解决

    今天解决一个redis内存使用量大的问题。和大家分享一下。 有一个历史遗留系统A,因为一些业务原因,申请了很大的r...

  • 数据库收集 - 收藏集 - 掘金

    Redis 内存压缩实战 - 后端 - 掘金在讨论Redis内存压缩的时候,我们需要了解一下几个Redis的相关知...

  • 内存泄露

    内存泄露 实战 实战Go内存泄露 - Go语言实战 - SegmentFault 思否 总结 pprof工具 使用...

  • [redis 源码走读] maxmemory 数据淘汰策略

    redis 是内存数据库,可以通过 redis.conf 配置 maxmemory,限制 redis 内存使用量。...

  • Zabbix自定义监控(二) 通过Zabbix监控redis内存

    如何利用zabbix监控redis内存使用情况呢 原理:利用redis-cli命令获取redis内存使用情况,re...

  • Redis知识梳理——淘汰策略

    Redis淘汰策略 Redis中设置最大使用内存,当内存数据集达到阈值时,redis将对内存数据进行淘汰,淘汰规则...

  • 5.Redis内存淘汰策略

    Redis内存淘汰策略 Redis在使用内存达到某个阈值(通过maxmemory配置)的时候,就会触发内存淘汰机制...

  • redis集群

    无论是单机还是主从结构,都无法解决数据量过大导致内存/虚拟内存无法村下所有数据的问题。redis集群通过分片根据k...

  • Redis内存模型

    一、Redis内存统计 工欲善其事必先利其器,在说明Redis内存之前首先说明如何统计Redis使用内存的情况。 ...

  • Redis入门

    内容来自Redis实战(Redis in Action)。 一、介绍 Redis 是一个开源的使用 ANSI C ...

网友评论

    本文标题:【实战】Redis内存使用量过大问题解决

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