redis之内存碎片问题如何解决

article/2025/9/25 0:39:14

写在前面

本文一起看下如何处理Redis的内存碎片问题。

1:什么是内存碎片

当操作系统内存充足,但是却无法申请连续N字节内存空间时,这些剩余的内存空间就叫内存碎片。

2:内存碎片是如何形成的

内存碎片的形成有两方面的因素,第一个是分配策略,第二个是数据本身的修改,分别来看下。

2.1:分配策略

Redis使用的内存分配器,如jemelloc,在进行内存分配时并非需要多少就申请多少,而是按照2的次方来申请的,比如需要的是6字节的内存空间,则会申请8字节的,需要的是13字节则会申请16字节,而这比实际需要的多出的内存空间,就会形成内存碎片。如下图:

在这里插入图片描述

其中的红色区域就是内存碎片。

2.2:数据本身的修改

我们假定应用A和应用B分别申请了8字节和16自己的内存,然后应用A删除了3字节的数据,则此时就会出现3字节的内存碎片,如下图:

在这里插入图片描述

3:如何判断是否有内存碎片

可以通过info memory命令查看,如下:

127.0.0.1:6379> info memory
# Memory
used_memory:793320
...
used_memory_rss:956392
...
mem_fragmentation_ratio:1.2 
mem_allocator:jemalloc-3.6.0 # 使用的内存分配器(自己加的)

以上used_memory代表实际使用的内存量,used_memory_rss代表实际分配的内存量,mem_fragmentation_ratio是used_memory_rss/used_memory,正常该值应该处于1~1.5之间,如果是大于1.5则说明内存碎片过于严重,需要进行干预处理。

mem_fragmentation_ratio值当出现小于1的情况时,则说明申请的内存不足够使用,而发生了swap,此时因为会有磁盘IO的发生,所以可能会导致响应速度变慢,需要加大内存。

4:如何清理内存碎片

清理内存碎片最直接的方法就是重启,该方法虽然简单粗暴,但也最简单有效,效果最好,实际工作中如果业务允许也可以使用该方法,但是如果是业务不允许该怎么办呢?在redis4版本中,就提供了碎片自动清理的机制,通过数据移动,空间合并等方法来达到内存碎片清理的目的,这个过程可以参考下图:

在这里插入图片描述

需要注意,碎片整理过程中是无法对外提供服务的,因为此时主线程需要拷贝数据,所以对这个时间我们需要进行控制,不能过长。首先想要开启内存碎片整理的话,需要配置 config set activedefrag yes,然后当满足如下条件时开始进行清理:

active-defrag-ignore-bytes 100mb:表示内存碎片的字节数达到 100MB 时,开始清理;
active-defrag-threshold-lower 10:表示内存碎片空间占操作系统分配给 Redis 的总空间比例达到 10% 时,开始清理。

为了控制对Redis性能的影响,提供了如下参数控制清理操作占用的CPU时长:

active-defrag-cycle-min 25: 表示自动清理过程所用 CPU 时间的比例不低于 25%,保证清理能正常开展;
active-defrag-cycle-max 75:表示自动清理过程所用 CPU 时间的比例不高于 75%,一旦超过,就停止清理,从而避免在清理时,大量的内存拷贝阻塞 Redis,导致响应延迟升高。

如果你使用的是Redis4及以上的版本,可以在生产环境将这个配置使用起来。

写在后面

参考文章列表:

linux常用命令 。


http://chatgpt.dhexx.cn/article/LAtq2ked.shtml

相关文章

如何解决内存碎片

内存碎片的产生: 内存分配有静态分配和动态分配两种 静态分配在程序编译链接时分配的大小和使用寿命就已经确定,而应用上要求操作系统可以提供给进程运行时申请和释放任意大小内存的功能,这就是内存的动态分配。 因此动态分配…

内存中,外部碎片与内部碎片,解决办法

什么是内部碎片、外部碎片 外部碎片,是由于大量信息由于先后写入、置换、删除而形成的空间碎片。为了便于理解,我们将信息比作货物,将存储空间比作仓库来举例子。假设,我们有编号为1、2、3、4、5、6的6间仓库库房,前天…

内存碎片

内存碎片的产生: 内存分配有静态分配和动态分配两种 静态分配在程序编译链接时分配的大小和使用寿命就已经确定,而应用上要求操作系统可以提供给进程运行时申请和释放任意大小内存的功能,这就是内存的动态分配。 因此动态分配…

内存碎片---内部碎片外部碎片

内部碎片的产生:因为所有的内存分配必须起始于可被 4、8 或 16 整除(视处理器体系结构而定)的地址或者因为MMU的分页机制的限制,决定内存分配算法仅能把预定大小的内存块分配给客户。假设当某个客户请求一个43字节的内存块时&…

内存碎片是什么?关于内存碎片的解释

内存碎片是什么?关于内存碎片 内存碎片通常分为内部碎片和外部碎片。 内部碎片 所谓内部碎片指的就是,系统为某项功能分派了一定的内存,但是该功能的实现没有用完所有系统分配的。余下的部分就被成为内存碎片的内部碎片。 外部碎片 外部内存…

内存碎片概念

内存碎片是无法被系统利用的内存区域,分为外部碎片和内部碎片。 1 外部碎片 系统有空闲内存区域,空闲内存的总量足够,但应用就是分配不到空间。无法被利用的内存被称为外部碎片。假设当前系统内存布局(空白区域表示空闲内存) 例如&#xf…

内存碎片产生原因及解决方法

文章目录 1、现象描述2、原因分析3、解决方法 1、现象描述 某些应用程序频繁调用 malloc函数申请内存空间,且申请空间的大小差别比较大,使用完成后通过 free函数释放内存空间,但内存空间依然缓存在glibc中,没有归还操作系统&#…

内存碎片:理解、应用场景和防止措施

目录 摘要1. 引言2. 内存碎片的概念3. 内存碎片的产生原因4. 应用场景4.1 应用场景一:长时间运行的服务器4.2 应用场景二:嵌入式系统 5. 预防和处理内存碎片6. 示例代码:生成内存碎片7. 总结 摘要 本文旨在向初学者详细介绍内存碎片的概念、…

内存碎片产生原因及解决办法

来源:知乎 链接:https://www.zhihu.com/question/51836333/answer/145693402 内存碎片通常分为内部碎片和外部碎片: 1. 内部碎片是由于采用固定大小的内存分区,当一个进程不能完全使用分给它的固定内存区域时就产生了内部碎…

POLARDB IMCI 白皮书 云原生HTAP 数据库系统 一 与其他的商业数据库在HTAP的异同点(译)...

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…

TiDB HTAP

TiDB 数据库 HTAP 概述 HTAP技术 OLAP和OLTP带来了多副本的问题。 HTAP的要求 HTAP的架构 异步复制,不参与投票。 HTAP的特性 行列混合 列存支持基于主键的实时更新TiFlash作为列存副本OLTP和OLAP业务隔离 智能选择(CBO自动或者人工选择)…

如何给一个 HTAP 数据库做基准测试?StoneDB学术分享会第4期

在最新一届国际数据库顶级会议 ACM SIGMOD 2022 上,来自清华大学的李国良和张超两位老师发表了一篇论文:《HTAP Database: What is New and What is Next》,并做了 《HTAP Database:A Tutorial 的专项报告。这几期学术分享会的文章&#xff0…

​网易游戏实时 HTAP 计费风控平台建设

本文整理自网易互娱资深工程师, Flink Contributor, CDC Contributor 林佳,在 FFA 实时风控专场的分享。本篇内容主要分为五个部分: 实时风控业务会话会话关联的 Flink 实现HTAP 风控平台建设提升风控结果数据能效发展历程与展望未来 众所周知&#xff…

黄东旭:开发者的“技术无感化”时代,从 Serverless HTAP 数据库开始 | PingCAP DevCon 2022

12 月 1 日,以"去发现,去挑战"为主题的 PingCAP DevCon 2022 主论坛在线上成功举办,为数万观众带来一场技术盛宴。PingCAP 联合创始人兼 CTO 黄东旭,在大会上分享了“The Future of Database”的主题演讲,分…

快速上手TiDB,体验全新的一栈式实时HTAP数据库

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10年DBA工作经验 一位上进心十足的【大数据领域博主】!😜😜…

CNCC技术论坛|分布式数据库HTAP的探索与实践

本文转载自微信公众号“中国计算机学会” 编者按 12月8-10日,中国计算机协会即将全线上举办CNCC2022,大会覆盖118个计算行业、人工智能、云计算、教育、安全等30个热门专业领域的技术论坛,700余位专家将着力探讨计算技术与未来宏观发展趋势&a…

TiDB:基于 Raft 的 HTAP 数据库

目录 1. 简介 2. 基于 Raft 的 HTAP 3. TiDB 架构 4. Multi-Raft 存储 5. HTAP 引擎 6. 实验 7. 相关工作 8. 结论 摘要 混合事务和分析处理(HTAP)数据库处理事务查询和分析查询时需要隔离,以消除它们之间的干扰。要实现这一点&…

云原生 HTAP -- Cloud-Native Transactions and Analytics in SingleStore

文章目录 背景1 存算分离2. 统一的表存储 (行列混存)2.1 二级索引2.2 行锁 3. 自适应查询引擎3.1 Segment skipping 实现3.2 Filtering 选择 4 性能总结 背景 上篇看了 PolarDB-IMCI 在HTAP的实践,其中提到了其也有借鉴 SingleStore 的实现思…

真正的 HTAP 对用户和开发者意味着什么?

作者 | 杨传辉 OceanBase 关于作者: 杨传辉,OceanBase CTO。2010年作为创始成员之一加入 OceanBase 团队,主导了 OceanBase 历次架构设计和技术研发,从无到有实现 OceanBase 在蚂蚁集团全面落地。同时,他也主导了两次…

HTAP系统架构实践总结

商业上的驱动力 当前市场上对于数据的处理方式越加的注重多种类型的负载混合进行,即对于用户或者业务端来说,有一个统一的处理逻辑或者架构。如对于广告计算,用户画像,分控,物流,地理信息等商业场景下&…