redis中内存碎片处理

【Redis技术讲解】带你彻底认识「内存碎片过高优化」功能和原理 [Kafka简介] **       Kafka是一种分布式的,基于发布/订阅的消息系统,它可以让你发布和订阅记录流。在这方面,它类似于一个消息队列或企业消息系统。它可以让你持久化收到的记录流,从而具有容错能力。** 主要设计目标如下: **     时间复杂度为O(1)的方式提供消息持久化能力,并保证即使对TB级以上数据也能保证常数时间的访问性能。** **       高吞吐率:使在非常廉价的商 阅读详情

目录

序言:

1:Redis中提供了哪些关于内存有关的命令(4.0之后)

1.1:MEMOEY DOCTOR

1.2:MEMOEY MALLOC-STATS

1.3:MEMOEY PURGE

1.4:MEMOEY STATS

1.5:MEMOEY USAGE

1.6:MEMOEY HELP

2:什么时候需要进行内存清理

2.1:我们通过命令行 INFO MEMORY查看redis中内存使用情况

2.2:通过MEMORY MALLOC-STATS 再次验证

3:内存碎片清理

3.1:MEMORY PURGE (手动命令处理)

2.2:通过配置(配置文件中设置activedefrag yes),系统自动处理


序言:

内存碎片是redis服务中分配器分配存储对象内存的时产生的。随着服务的运行,内存碎片也会随之越来越多,如果不进行处理导致内存资源的浪费。如果在内存资源紧张的服务器中出现大量内存碎片会导致OOM溢出与swap交换。

1:Redis中提供了哪些关于内存有关的命令(4.0之后)

1.1:MEMOEY DOCTOR

 会列出 Redis 服务器遇到的不同类型的内存相关问题,并提供相应的解决建议

1.2:MEMOEY MALLOC-STATS

MEMORY MALLOC-STATS 命令提供内存分配情况的内部统计报表,(目前只支持jemalloc内存分配器)。通过该命令可以看出jemalloc对于所有对象进行分配时,各具体分区的内存详细状况。

1.3:MEMOEY PURGE

支持该命令会清除内存碎片

1.4:MEMOEY STATS

将服务器的内存使用情况以数组情况返回

1.5:MEMOEY USAGE

该命令给出一个key和它值在RAM中占用的字节数(包含redis管理该key是占用的内存数)

如上图所示,即时key value为空,也占用了46b的内存资源。

1.6:MEMOEY HELP

提示上述5种命令的作用以及使用情况

2:什么时候需要进行内存清理

2.1:我们通过命令行 INFO MEMORY查看redis中内存使用情况

发现内存碎片率达到了536.29,说明服务中大多数内存的占用都是因为存在大量的内存碎片。

2.2:通过MEMORY MALLOC-STATS 再次验证

如下图所示:

 

我们关注的是util行,很多bins的使用率小于0.1,说明整体的内存使用率不高,存在大量的内存碎片

3:内存碎片清理

针对于上述demo情况进行对redis内存进行碎片清理,redis中内存碎片清理主要分为以下两个阶段

  1. 在redis4.0之前的版本中只能通过正确的重启redis服务来解决内存碎片问题。
  2. 在redis4.0之后,redis提供了两种方式的碎片整理功能,第一种通过手动命令进行触发,第二种通过配置(配置文件中设置activedefrag yes),使redis在运行时就可以自动的进行内存碎片清理。

3.1:MEMORY PURGE (手动命令处理)

redis提供MEMORY PURGE命令手动进行回收内存(此命令会阻塞主进程)

执行完成之后再次验证

发现内存碎片率从536.29急剧下降到12.36,通过MEMORY MALLOC-STATS中utils发现大量的bins达到了1。

2.2:通过配置(配置文件中设置activedefrag yes),系统自动处理

在使用自动垃圾整理服务之前,redis在配置文件中给予我们使用该功能的警告!目前该功能只是实验性质,如果需要使用该功能需要先进性压力测试以及功能评估(因为内存碎片整理是通过主线程程进行的,redis又是单线程的,内存碎片整理操作会 scan (通过迭代进行)整个 redis 节点,并进行内存复制、转移等操作。如果频繁的触发内存整理,肯定会导致redis服务整体响应时间变长。可以通过latency来进行对比)

#
# WARNING THIS FEATURE IS EXPERIMENTAL. However it was stress tested
# even in production and manually tested by multiple engineers for some
# time.

##警告此功能是实验性的。然而,即使在生产中也进行了压力测试,并且由多个工程师手动测试了一段时间。
##通过配置文件进行设置
# 开启自动清除垃圾碎片功能
activedefrag yes

# 启动碎片整理的最小内存碎片量默认100md
active-defrag-ignore-bytes 100mb

##此处内存碎片率与该值与mem_fragmentation_ratio的计算规则不一致
# 当内存碎片超过 10% 时,开启内存碎片整理
active-defrag-threshold-lower 10

#  内存碎片超过 100%,则尽最大努力整理
active-defrag-threshold-upper 100

# 内存碎片回收使用cpu资源最小比率 默认5
active-defrag-cycle-min 5

# 内存碎片回收使用使用cpu资源最大比率 默认75
active-defrag-cycle-max 75

#从主字典扫描中处理的SET/HASH/ZSET/List字段的最大数目 默认1000
active-defrag-max-scan-fields 1000

上述参数需要结合线上redis的环境进行压测得到最适用的值。

Redis内存治理实战:从maxmemory设置到淘汰策略与碎片处理 内存数据库的高效运行离不开对内存使用机制的深入理解。当数据量增长超出预期,或淘汰策略配置不当,Redis可能因内存达到上限而拒绝写入,进而引发缓存穿透与数据库过载。本文从内存分配原理出发,详细解析maxmemory的容量规划方法、八种淘汰策略的适用场景,以及如何通过INFO memory、MEMORY USAGE和bigkey扫描定位内存消耗源头。同时,针对内存碎片与swap等隐性风险,提供了基于activedefrag与监控告警的治理方案。理解并正确配置这些参数,能够帮助你在高并发场景下构建稳定可靠的缓存 阅读详情

相关推荐

大模型学习路线之多模态模型

​ (Frankly speaking,博主太懒了)章节一只对CLIP、BLIP、BLIP2、InstructBLIP进行了整理,章节二以CLIP、VisualGLM作为实践案例。​ 实际上多模态模型除了CLIP、BLIP、BLIP2、InstructBLIP,还有LLaVA、miniGPT4,以及国内清华的VisualGLM、阿里的Qwen-VL等。(更多多模态原理可以看文末的参考说明)一、多模态模型 & 理论。

2401_86435672的博客 2287

Redis核心技术-性能-内存碎片如何形成以及处理办法

内存碎片是如何形成的?   内存碎片的形成有内因和外因两个层面的原因。 1.内因是操作系统的内存分配机制; 2.外因是Redis 的负载特征。 内因:内存分配器的分配策略   内存分配器一般是按固定大小来分配内存,而不是完全按照应用程序申请的内存空间大小给程序分配。   Redis 可以使用 libc、jemalloc、tcmalloc 多种内存分配器来分配内存,默认使用 jemalloc。   jemalloc 的分配策略之一,是按照一系列固定的大小划分内存空间,例如 8 字节、16 字节、32 字节、4

ALONG的博客 1544

AI:Coze、Dify、n8n:三款低代码工具如何选?

Coze、Dify、n8n:三款低代码工具如何选?

Kant2048的博客 2806

redis4支持内存碎片清理功能使用

最近看到redis4支持内存碎片清理了, 之前一直期待有这么一个功...

weixin_34005042的博客 521

Mamba vs YOLO:目标检测选型指南(附实际项目对比)

本文深入对比了Mamba和YOLO在目标检测领域的性能差异与应用场景。通过实际项目数据,分析了两者在城市交通监控、工业质检等场景下的表现,提供了详细的选型指南和部署优化建议,帮助开发者根据实时性、精度等需求选择最适合的解决方案。

weixin_29062255的博客 368

手把手教你用FreeModbus RTU协议栈实现STM32与PLC通信(附Keil工程)

本文详细介绍了如何使用FreeModbus RTU协议栈在STM32上实现与PLC的工业通信。从环境搭建、工程配置到关键移植接口实现,提供了Keil工程模板和调试技巧,帮助开发者快速掌握Modbus RTU通信技术,适用于工业自动化领域的设备间通信需求。

weixin_42549037的博客 418

redis4.0之MEMORY命令详解

前言 在过去,查看redis的内存使用状态只有info memory命令,并且也只有一些基础信息,想要获取全局信息就有些困难。4.0开始redis提供了MEMORY命令,一切都变得简单起来。redis MEMORY命令 MEMORY命令一共有5个子命令,能够经过MEMORY HELP来查看:数据库 127.0.0.1:6379> memory help 1) "MEMORY DOCTOR - Outputs memory problems rep

liqingbing12的专栏 3567

别再为环保数采仪通讯发愁!手把手教你用MCGS触摸屏+4G模块发送HJ212报文

本文详细介绍了如何使用MCGS触摸屏配合4G模块高效发送HJ212标准报文,解决工业环保监测中的数据采集与传输难题。从硬件连接到软件配置,再到报文组装与发送策略,提供全流程实用指南,特别针对4G网络环境下的特殊设置给出优化建议,帮助工程师提升数据传输稳定性与效率。

weixin_30847865的博客 389

Redis 4.0 自动内存碎片整理(Active Defrag)源码分析

阅读本文前建议先阅读此篇博客: Redis源码从哪里读起 Redis 4.0 版本增加了许多不错的新功能,其中自动内存碎片整理功能 activedefrag 肯定是非常诱人的一个,这让 Redis 集群回收内存碎片相比 Redis 3.0 更加优雅,便利。我们升级 Redis 4.0 后直接开启了activedefrag,经过删除部分 key 测试,发现它确实能有效的释放内存碎片,但是并没有测试...

weixin_34090643的博客 656

CCS TMSC6748 报错Error connecting to the target: (Error -600 @ 0x0)

CCS TMSC6748 报错Error connecting to the target:(Error -600@ 0x0)

AS_the_deer1717的博客 6636

AI学习指南RAG篇(19)-API调用与集成

通过上述API调用示例,您可以方便地将RAGFlow与其他系统集成,实现数据集管理、文档处理、会话管理等功能。希望本文的介绍能帮助您更好地理解和使用RAGFlow的API。

俞兆鹏的博客 2545

Redis的内存碎片是什么,如何处理?

处理 Redis 内存碎片的关键在于定期监控和适时采取措施。通过重启服务、使用命令、启用主动碎片整理以及调整内存分配器等方法,可以有效减少内存碎片,提高 Redis 的性能和稳定性。在实际应用中,可以根据具体情况选择合适的方法。

qq_33240556的博客 928

【AI智能体】Codex 浏览器操作自动化任务实战操作详解

【AI智能体】Codex 浏览器操作自动化任务实战操作详解

congge 4095

Redis内存碎片处理

Redis内存碎片处理不知道我们在执行删除操作时有没有注意过这样一个现象,删除一些bigkey后内存分配器分配的容量并没有减少,实际容量减少了,这是为什么呢?演示如下模拟bigkey删除创建生成bigkey的脚本文件createdata.sh#!/bin/bash cd /opt/redis/redis-6.0.6/bin/ for i in {1..10000} do   echo "key${i} ${i}"  

zzf1233的博客 1544

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Redis100篇 - Redis的内存碎片怎么处理 碎片整理配置+效果验证

Redis内存碎片处理实战:配置优化与效果验证 Redis作为高性能内存数据库,内存碎片问题会严重影响其性能表现。本文通过实战演示Redis内存碎片的处理过程,包含配置优化和效果验证。 内存碎片问题分析 现象:Redis逻辑内存与物理内存占用差异大 关键指标:mem_fragmentation_ratio>1.8即需干预 危害:内存浪费、性能下降、OOM风险 自动碎片整理方案 Redis 4.0+提供Active Defrag功能: 扫描并识别碎片区域 移动数据到连续空间 合并空闲内存块 实战验证步骤

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Redis内存碎片率调优处理

在生产环境中Redis Cluster集群触发了内存碎片化的告警(碎片率>1.5),集群节点分布三台宿主机六个节点三主三从架构,Redis版本是6.2.X。

weixin_58146638的博客 2008

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Redis:过期key删除,内存淘汰策略,内存碎片处理

(redis在进行周期性删除时,该值则记录了清理任务的当前执行位置,因为redis数据庞大,无法一次清理完成,需要记录上一次的清理位置,再次清理时,在这个位置以后继续清理,这个位置的记录就叫游标)slow模式:这种模式下按照server.hz配置的参数的频率执行清理任务,假如说将其设置为10,那么该模式下,redis将每秒执行十次清理,并且每次执行时间不能超过25ms。中的lru属性的值,而lru属性在LRU相关模式下会记录最近访问时间戳,在LFU模式化会用一个简单的算法记录访问频率。

dxh9231028的博客 1396

Redis源码解析(25) 在线增量内存碎片处理

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。 文章目录引言源码分析activeDefragCycledefragScanCallbackdefragLaterStep总结 源码版本为6.2.3 引言 这是个非常有意思的特性,因为Redis本身的内存申请借助于jemalloc与自己封装的zmalloc系接口,所以可以很好的实现全局的内存统计与内存池化的功能,但是池化的问题也接踵而至,即内存碎

李兆龙的博客 958

redis内存碎片处理

内存碎片让redis占用比自身实际数据存储更多的内存空间,需要整理redis数据以保证redis内存空间的最大化利用

fanghailiang2016的博客 1362

Redis 源码解析 - Redis 在线增量内存碎片处理

Redis在线增量内存碎片处理主要是指Redis 4.0及以上版本引入的自动内存碎片整理(Active Defragmentation)功能。这一特性允许Redis在服务运行期间,动态地对内存进行碎片整理,减少内存碎片,提高内存利用率。

qq_33240556的博客 654

java有没有内存碎片_redis内存碎片过多怎么处理?

thefragmentationratioisnotreliablewhenyouhadamemoryusagethatatpeakismuchlargerthanthecurrentlyusedmemory.Thefragmentationiscalculatedastheamountofmemorycurrentlyinuse(...

weixin_39935777的博客 182

Redis的Hot Key自动发现与处理方案?Redis大Key(Big Key)的优化策略?Redis内存碎片率高的原因及解决方案?

大Key通常定义为:字符串类型>10MB,哈希/列表/集合/有序集合类型元素数量>10000个。)正常范围为1.0~1.5,超过1.5需优化。

weixin_45762066的博客 650

Redis性能优化

本文是Redis性能优化文章,详细举例了三个降低Redis性能的实例,显著降低理解门槛,而非单纯罗列技术术语,力求小白也能理解。

清酒伴风的博客 4487

Redis内存模型

1

今天吃了吗的博客 524

Redis内存设置与调优:maxmemory、淘汰策略和碎片处理全攻略

内存是Redis最核心的资源,也是线上故障的高发区。很多开发者对Redis内存的认知仍停留在“存数据”这一层,实际上它还包括对象元数据、缓冲区、过期字典和内存碎片。理解Redis内存构成是合理设置maxmemory的基础,而选择正确的淘汰策略则决定缓存命中率和数据完整性。当碎片率升高或遭遇OOM时,activedefrag、懒释放等技术能有效缓解压力。本文从内存原理出发,结合工程实践,系统讲解最大内存规划、淘汰策略选型、碎片整理方法以及排查流程,帮助你在缓存、存储等真实场景下稳定运行Redis。

weixin_30516429的博客 222

NotSQL 之 Redis(四)(性能管理之内存优化篇)

前言 Redis 是基于内存的 key-value 数据库,内存的大小是有限制的 在生产环境中,偶尔会遇到 Redis 服务器内存不够的情况,那对于这种情况 Redis 的内存是如何回收处理的呢?如果内存满了,Redis 会怎么办呢 一、查看 Redis 内存使用 #使用 192.168.126.15:6379 连接本机上的 Redis 数据库 [root@localhost ~]# redis-cli -h 192.168.126.15 -p 6379 192.168.126.15:6379&gt

Arlssaze的博客 2705
上一篇: springboot2.x +redis使用和源码分析三(序列化器)
下一篇: Redis中info命令详解
F_Hello_World
博客等级 码龄11年 38粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值