当前位置: 首页 > news >正文

性能测试必备知识|如何管理Redis的内存?全是硬货

随着使用Redis的深入,我们不可避免的需要深入了解优化Redis的内存,本章将重点讲解如何管理Redis的内存。关注我们,每天都有技术好文分享给大家,小伙伴们觉得有用的话记得转发给身边的朋友哦。

一、内存消耗

当mem_fragmentation_ratio>1时,说明used_memory_rss-used_memory多出的部分内存并没有用于数据存储,而是被内存碎片所消耗,如果两者相差很大,说明碎片率严重。当mem_fragmentation_ratio<1时,这种情况一般出现在操作系统把Redis内存交换(Swap)到硬盘导致,出现这种情况时要格外关注,由于硬盘速度远远慢于内存,Redis性能会变得很差,甚至僵死。

Redis进程内消耗主要包括:自身内存+对象内存+缓冲内存+内存碎片,其中Redis空进程自身内存消耗非常少,通常used_memory_rss在3MB左右,used_memory在800KB左右,一个空的Redis进程消耗内存可以忽略不计。

缓冲内存主要包括:客户端缓冲、复制积压缓冲区、AOF缓冲区。客户端缓冲指的是所有接入到Redis服务器TCP连接的输入输出缓冲。输入缓冲无法控制,最大空间为1G,如果超过将断开连接。

复制积压缓冲区:Redis在2.8版本之后提供了一个可重用的固定大小缓冲区用于实现部分复制功能,根据repl-backlog-size参数控制,默认1MB。对于复制积压缓冲区整个主节点只有一个,所有的从节点共享此缓冲区,因此可以设置较大的缓冲区空间,如100MB,这部分内存投入是有价值的,可以有效避免全量复制AOF缓冲区:这部分空间用于在Redis重写期间保存最近的写入命令,AOF缓冲区空间消耗用户无法控制,消耗的内存取决于AOF重写时间和写入命令量,这部分空间占用通常很小。

Redis默认的内存分配器采用jemalloc,可选的分配器还有:glibc、tcmalloc。内存分配器为了更好地管理和重复利用内存,分配内存策略一般采用固定范围的内存块进行分配。内存碎片问题虽然是所有内存服务的通病,但是jemalloc针对碎片化问题专门做了优化,一般不会存在过度碎片化的问题,正常的碎片率(mem_fragmentation_ratio)在1.03左右。

一般以下场景容易出现高内存碎片问题:

频繁做更新操作,例如频繁对已存在的键执行append、setrange等更新操作。大量过期键删除,键对象过期删除后,释放的空间无法得到充分利用,导致碎片率上升。

出现高内存碎片问题时常见的解决方式如下:

数据对齐:在条件允许的情况下尽量做数据对齐,比如数据尽量采用数字类型或者固定长度字符串等,但是这要视具体的业务而定,有些场景无法做到。

安全重启:重启节点可以做到内存碎片重新整理,因此可以利用高可用架构,如Sentinel或Cluster,将碎片率过高的主节点转换为从节点,进行安全重启子进程内存消耗主要指执行AOF/RDB重写时Redis创建的子进程内存消耗。Redis执行fork操作产生的子进程内存占用量对外表现为与父进程相同,理论上需要一倍的物理内存来完成重写操作。

内存大页机制(Transport Huge Pages,THP),是linux2.6.38后支持的功能,该功能支持2MB的大页内存分配,默认开启。在redis.conf中增加了一个新的配置项“disable-thp”来控制THP是否开启。

disable-thp yes

子进程内存消耗总结如下:

1、Redis产生的子进程并不需要消耗1倍的父进程内存,实际消耗根据期间写入命令量决定,但是依然要预留出一些内存防止溢出。

2、需要设置sysctl vm.overcommit_memory=1允许内核可以分配所有的物理内存,防止Redis进程

http://www.jsqmd.com/news/216331/

相关文章:

  • 游戏开发者福音:一小时构建Z-Image-Turbo角色概念图生成系统
  • 得物Java面试被问:方法句柄(MethodHandle)与反射的性能对比和底层区别
  • AI绘画新选择:无需代码基础,三步部署通义Z-Image-Turbo WebUI
  • 懒人专属:5步搞定阿里通义Z-Image-Turbo WebUI云端部署
  • 告别CUDA地狱:用预配置Docker镜像一键部署Z-Image-Turbo开发环境
  • Node.js用workerData传递数据
  • 机车车载设备信号采集(源码+万字报告+讲解)(支持资料、图片参考_相关定制)
  • Z-Image-Turbo预设按钮原理:快速尺寸配置的技术实现
  • 2026年软考考试计划即将发布,这些变化要提前了解清楚!
  • 【无人机编队】基于matlab单领导-双跟随无人机协同编队控制【含Matlab源码 14864期】
  • 智能装备工厂研发部门如何选用设计云桌面实现降本增效
  • M2FP模型部署的硬件选型建议
  • 低成本创业方案:用云端GPU+Z-Image-Turbo搭建AI头像生成服务
  • 阿里通义Z-Image-Turbo API开发:一小时搭建完整测试环境
  • Python 里的“看门大爷”:彻底搞懂描述符 (Descriptors)
  • 【成绩管理】基于matlab GUI学生成绩管理系统(含各学科最高低分 平均法 直方图 饼图)【含Matlab源码 14866期】
  • 1台高性能云图形工作站如何共享给6位SolidWorks设计师同时并发
  • Z-Image-Turbo游戏角色立绘生成质量评估
  • 科哥版Z-Image-Turbo社区贡献指南:快速搭建开发环境
  • AI绘画商业化第一步:如何用预配置镜像快速部署Z-Image-Turbo WebUI服务
  • 跟曹操学「管理」
  • 武汉咸安坊:百年石库门里分,藏着汉口的城市记忆
  • 新研智材联合创始人CTO南凯:材料科学新纪元——AI大模型驱动研发效率倍增|2025极新AIGC峰会演讲实录
  • 金竹飞瀑谷:在瀑布深潭间,邂逅畲族的历史与风情
  • springboot基于Android的个人健康管理系统
  • 从图片到Mask:M2FP处理流程完全解析
  • M2FP模型在工业机器人中的应用:人机协作安全
  • YOLOv8优化:损失篇 | 原创自研 | 一种基于小目标改进的多尺度的动态(SD)损失
  • 死锁(八股)
  • 新看点/818AI创始人冷煜:AI落地,决胜“最后100米” | 2025极新AIGC峰会演讲实录