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

相关推荐

ANSYS Discovery 2023R1 保姆级教程:手把手教你玩转几何模型参数化(附避坑指南)

本文提供ANSYS Discovery 2023R1几何模型参数化的全面教程,涵盖基础环境搭建、核心操作解析及高级应用场景。重点讲解参数化建模中的常见问题与避坑方案,帮助用户高效掌握Workbench与Discovery的协同使用技巧,提升工程仿真效率。

weixin_29204205的博客 752

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

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

ALONG的博客 1544

VSCode上搭建C/C++开发环境(vscode配置c/c++环境)Windows系统---保姆级教程

关于VSCode上搭建C/C++开发环境的内容,到这里就结束了,这里博主感叹一下,VSCode真的挺强大的,作为一个编辑器,可以通过和编译器链接成为开发环境,将环境配置好的话,在这上面写代码似乎也是个不错的选择。大家有任何疑问,欢迎在评论区中提出,本篇博客有任何问题和错误也欢迎来和博主讨论,真心希望能和大家一起进步。最后,如果本篇博客对你有帮助的话,能不能给博主一个三连啊!

2303_79329831的博客 8万+

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

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

weixin_34005042的博客 521

【ComfyUI专栏】ComfyUI 常用工作流下载与分享网址

首先我们来分享第一个网站,Openart 网站,这个网站同时也能提供比较多的其他类型。但是如果希望下载工作流,我们可以访问到如下的这个站点。作为ComfyUI的学习用户来说,我们通常需要借助他山之石来帮助我们快速成长,因此我们需要找到能够分享和下载的网址。,当前网站是综合性网站,在网站中可以下载各种不同的类型,其中工作流只是可以下载的非常小的部分。这个网站也可以浏览不同的工作流,这个工作流的地址和访问如下的站点。

技术与管理的平衡木- 7793

【重识云原生】第四章云网络4.9.5.1节下一代智能网卡——DPU综述

随着数据中心的高速发展,通信能力和计算能力成为数据中心基础设施的相辅相成的两个重要发展方向。若数据中心仅关注计算能力的提升,通信基础设施的提升跟不上,那么数据中心的整体系统性能依然受限,无法发挥出真正的潜力。DPU的提出背景就是应对这些数据量和复杂性的指数级增长。未来,需要将计算移至接近数据的位置,这是目前业界所公认的以数据为中心的体系结构下的创新。综上,DPU对数据中心来说,是通过更明细的分工来实现效率的提升、实现总体系统的成本最优化。...

junbaozi的专栏 1724

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

视源CVTE嵌入式面试题及参考答案(200+面试题,17万字)

内核模块如何设置? 内核模块是可在运行时动态加载到内核或从内核卸载的代码块。以下是设置内核模块的步骤: 首先,编写内核模块代码。通常使用 C 语言编写,包含必要的头文件,如<linux/init.h>、<linux/module.h>等。在代码中,需要定义模块的初始化函数和清理函数。初始化函数在模块加载时被调用,用于进行模块的初始化工作,如注册设备、分配资源等。清理函数在模块卸载时被调用,用于释放资源、注销设备等。 例如: #include <li

大模型大数据攻城狮的专栏 2204

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

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

weixin_34090643的博客 656

MIKE 21 教程 2.2 Domain, Time, Module Selection设置教学

上一节讲解了水动力模型的基本概念与文件创建MIKE 21 教程 2.1水动力模型介绍​本节讲解水动力模型前三个模块的设置此模块需导入之前绘制好的网格文件,导入后可预览网格文件点击上方的Domain Specification可查看网格的数据统计与高程属性,快速检查网格文件有无明显错误 点击上方的Boundary names,可查看之前定义的出入水边界。在网格文件中,我们对边界只能以数字属性进行区分,这里可以对数字属性进行命名,在name中直接修改即可。本实例中我们的2代表入水边界,3代表出水边界。因为博主日

Hello Word 3865

Asterisk中MixMonitor之支持接通后录音

一、概述 当我们使用开源的IPPBX(比如Elastix-2.5/4.0或者ISSABEL-4.0/FreePBX)的时候Outbound和Inbound路由(RingGroup/FollowMe)中有一个Call Recording选项,其值包括:Allow、Record immediately、Record On Answer和Nerver。当选择为Record On Answer,其实就是MixMonitor自带一个b选项。 尽管Asterisk自带的MixMoni...

宽简厚重—博约 1156

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

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

qq_33240556的博客 928

YOLOv12改进策略【独家融合改进】| SPD-Conv+PPA 再次提升模型针对小目标的特征提取能力

SPD-Conv是一种新的 CNN 构建模块,用于替代传统 CNN 架构中使用的步长卷积(strided convolution)和池化(pooling)层,它由空间到深度(Space-to-depth,SPD)层和非步长卷积(non - strided convolution)层组成。

Limiiiing的博客 1028

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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

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

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Redis内存碎片率调优处理

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

weixin_58146638的博客 2008

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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

余额充值