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与监控告警的治理方案。理解并正确配置这些参数,能够帮助你在高并发场景下构建稳定可靠的缓存 阅读详情

相关推荐

niushop靶场漏洞查找-文件上传漏洞等(超详细)

发现报错,而且这个报错十分熟悉,与我们所学的sqli报错注入特别像。这里查询到后面的url有且仅有一个,目测估计是后台。上传的图片是包含一句话木马的图片。发现获取到了webshell。实战漏洞-niushop。

qq_59020256的博客 1727

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

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

ALONG的博客 1544

RK3568—基于GM8775C的MIPI转双通道LVDS屏幕调试

Rockchip RK3568 原生显示接口不支持双通道LVDS屏幕的数据输出,因此需要借助显示转换芯片才能实现双通道LVDS屏幕的驱动。本文介绍使用GM8775C芯片方案,在 RK3568 平台实现单路 MIPI DSI 信号输出来驱动双通道LVDS显示屏。 关于GM8775C GM8775C 型 DSI 转双通道 LVDS 发送器产品主要实现将 MIPI DSI 转单/双通道 LVDS功能,MIPI 支持 1/2/3/4 通道可选,每通道最高支持 1Gbps 速率,最大支持 4Gbps 速率。LV.

Industio_优快云的博客 1万+

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

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

weixin_34005042的博客 521

Unity3d SECTR 2019 从零开始了解(零)

插件刚下载下来,虽然从Demo里面看了下大致效果,但尝试使用的时候茫无头绪,因此决定一边读文档一边写下笔记。这个笔记会从最基本的名词概述开始一步一步到用法。 除非特别注明,所有内容都不是机翻,而是理解后自己翻译的。 翻译内容: 【零】API REFERENCE MANUAL第一章Documentation Core Concept 【一】 名词概述 CORE CORE是SECTR的核心,一个快速将 Sectors 和 Portals 加入到Unity中的工具,以及完整的源代码,可以构筑独特的功能。 VI

狗蛋在土里瑟瑟发抖 1500

TGAT Python:图神经网络中的动态图算法

其中,图神经网络中的动态图算法成为了研究的热点之一。在模型的 forward 方法中,通过循环调用 TGATLayer 实例来进行图神经网络的前向传播。最终,模型返回图中节点的表示向量 output,可以用于图分类等任务。TGAT 算法的核心思想是在节点之间建立注意力连接,以捕捉节点在不同时间步之间的关系。TGAT 算法通过引入注意力机制和时间信息,从而有效地对动态图数据进行建模和分析。通过以上 Python 代码,我们可以方便地构建和训练 TGAT 模型,并在图分类任务中应用它。

2301_79366435的博客 1827

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

1553B总线介绍及其硬件方案设计

军用1553B总线 1.简介 简单介绍可参考(https://blog.youkuaiyun.com/ScilogyHunter/article/details/108444231)博主写的很详细。 1553B总线是MIL-STD-1553总线的简称,其中B就是BUS,MIL-STD-1553B总线是飞机内部时分制命令/响应式多路复用数据总线。1553B数据总线标准是20世纪70年代由美国公布的一种串行多路数据总线标准。1553B总线能挂31个远置终端,1553B总线采用指令/响应型通信协议,它有三种终端类型: BC:

小幽余生不加糖 1万+

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

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

weixin_34090643的博客 656

S32K324 Stack异常分析及解决方案

在项目开发过程中,在一次软件变更时,调整了task优先级之后导致应用层软件中的float数据经常性的变为NAN,导致应用层功能失效。本文记录下这个bug的分析及解决过程。该问题排查了好几天,最开始正向排查不出来,差点放弃了,ETAS OS也没有人支持,只能换一种思路,通过反向推,最终定位到问题,能完美解决,还是很欣慰的。遇到问题不可怕,Bug一直都会有,主要是在解决问题中的思路和方法,不断总结积累,总会越来越好的!

赞的博客 597

SOUL.md 人格定制的 7 个高阶技巧:Hermes Agent 精准控制 AI 行为模式

揭示 SOUL.md 的本质是行为契约而非人格设定,介绍7个围绕边界约束的高阶技巧,包括用上下文锚点(INPUT SCOPE/OUTPUT TARGET/CONSTRAINTS)替代角色描述、动态渲染锚点适配CI流程等,显著降低token消耗与人工review耗时。

weixin_42520239的博客 251

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

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

qq_33240556的博客 928

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

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

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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

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

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

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Redis内存碎片率调优处理

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

weixin_58146638的博客 2008

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、付费专栏及课程。

余额充值