暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片
故障分析_ Redis 故障诊断及常用运维命令—内存篇.pdf
222
5页
2次
2023-07-07
5墨值下载
故障分析| Redis 故障诊断及常用运维命令—内存篇
收录于话题
作者:任仲禹
爱可生 DBA 团队成员,擅长故障分析和性能优化,文章相关技术问题,欢迎大家一起讨论。
本文来源:原创投稿
*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
本文目录:
背景
Redis 内存消耗划分
内存 OOM 会导致哪些问题?
排查思路
是否数据量太大?
是否客户端输入缓冲区有问题?
是否复制积压缓冲区有问题?
是否客户端输出缓冲区有问题?
实用命令
模拟 Redis 压力相关命令
Redis 内存排查命令
总结
背景
你是否有过这种困扰:我的数据量非常小,但还是报 OOM 错误?
# 个简单set提示内存不
[root@10-186-61-38 redis]# redis-cli -p 9999 set actionsky 1
(error) OOM command not allowed when used memory > 'maxmemory'.
首先我给大家解释下,Redis 的 OOM 分两种。
种是因 Redis 使用内存超出 OS 物理内存,OS 将 Redis 进程杀死。
种是 Redis 使用内存超过 maxmemory 参数配置,引发 Redis Server 层 OOM。
OOM 是 Redis 最常见的内存故障,它影响很大:
故障发生时,进程并不会退出,能读但无法写入。
配置了 allkeys-lru、allkeys-lfu 等内存淘汰策略场景下,会有大量键失效,导致缓存命中率急剧下降。
本文中,我会给大家分享下该种内存问题的排查方向及运维命令
Redis 内存消耗划分
简短介绍下 Redis 内存消耗划分情况,为下文诊断提供思路。上图可以总结 Redis 消耗内存分如下几块:
对象内存:理论上占用最大,存储所有业务数据,如字符串类型、哈希类型对象等。
客户端内存:包括输入客户端(查询或写入命令)、输出客户端使用的内存,因为不受 maxmemory 参数
控制,这块我们需重点排查。
复制积压缓冲:所有从库客户端共享、保存固定大小的写入命令用于从库失连后数据补偿。
Redis 自身内存:存储数据元数据信息、过期键字典等。
AOF 缓冲区:AOF 持久化、重写缓冲区,般占用很少,基本不需要关注。
内存 OOM 会导致哪些问题?
1. Redis 无法写入,只能读取。
2. Redis 大量键被逐出内存或过期,导致 Redis 查询效率降低(maxmemory-policy 配置为非默认值
noeviction 时)。
排查思路
注意:下文不做特别说明的话,我的 maxmemory 设置为 1G,其它任何参数为默认。
是否数据量太大?
使用 redis-benchmark 持续灌入数据,
检查内存使用情况,发生 OOM 状态时 used_memory 定会大于 maxmemory。
检查数据对象内存和其它内存使用情况如下图:
这里有必要说明下 overhead.total,它包括除数据外 Redis 消耗的所有内存,比如前面提到的复制缓冲区、客
户端输入输出缓冲区等,另外还包括些元数据如 overhead.hashtable,它是数据库中元数据消耗的内存大
小,包括以下三项:
整个数据库是种 hash 表,首先就是这张 hash 表使用的内存。
个 key-value 对都有dictEntry 来记录他们的关系,元信息便包含该 db 中所有 dictEntry 使用的
内存。
redis 使用 redisObject 来描述 value 所对应的不同数据类型(string、list、hash、set、zset),那么
redisObject 占用的空间也计算在元数据。
大家对这个现象可能有点疑惑,为啥我明明设置 maxmemory 为 1G,你 Redis 只给我存了 990 多 M 数据
就满了?
of 5
5墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜