怎样使用Redis MEMORY PURGE强制归还操作系统内存

酷宇酱_5903

酷宇酱_5903

2026-09-15

153人浏览

原创

memory purge仅在使用jemalloc且mem_fragmentation_ratio>1.5时可能降低used_memory_rss,需空闲内存块足够大且连续才能触发madvise归还;libc malloc下直接报错,碎片率<1.2时无效。

怎样使用redis memory purge强制归还操作系统内存

MEMORY PURGE 什么时候能真正归还 RSS 内存

它只在 Redis 编译时使用 jemalloc(默认),且运行时内存碎片严重(mem_fragmentation_ratio > 1.5)时才可能降低 used_memory_rss。前提是:空闲内存块足够大、连续,jemalloc 才会调用 madvise(MADV_DONTNEED) 交还给 OS。

常见误判场景:

  • mem_fragmentation_ratio ≈ 1.1 → 执行 MEMORY PURGE 基本无变化
  • 用了 libc malloc 或 tcmalloc → 命令直接报错:ERR MEMORY PURGE not supported
  • used_memory 接近 maxmemory,但 used_memory_rss 更高 → 这是碎片,不是内存泄漏;MEMORY PURGE 可能有用,但淘汰策略不会触发

如何确认当前是否适合执行 MEMORY PURGE

先跑 INFO memory,重点关注三行:

  • used_memory:1827456000(Redis 自认用了多少)
  • used_memory_rss:3982458880(OS 看到的物理内存)
  • mem_fragmentation_ratio:2.18(RSS / used_memory,> 1.5 才值得干预)

如果 mem_fragmentation_ratio 在 1.0~1.2 之间,说明碎片极少,MEMORY PURGE 没必要;若 > 2.0 且 used_memory_rss − used_memory > 500MB,可尝试。

再验证分配器类型:INFO memory 中若有 mem_allocator:jemalloc-5.2.1 才继续;若显示 libc,跳过该命令。

执行 MEMORY PURGE 的正确姿势和副作用

直接发命令即可,无需参数:

协同养育操作系统
协同养育操作系统

协同养育操作系统(Co-Parenting OS)— 离异家庭专业协同养育支持系统。12模块覆盖接送管理、成长记忆库、孩子观察站、亲子关系粘合剂、共同挑战中心、情绪冲突观察、父母成长、成长档案馆、成长阶段引擎、风险预警、驾驶舱、被恶意攻击急救包。当用户涉及离异家庭育儿、协同养育、抚养探视、接送安排、孩子成长记录、亲子关系、离异冲突、被恶意攻击、前任矛盾等话题时触发。

下载
MEMORY PURGE

它会阻塞主线程几毫秒到几十毫秒(取决于 jemalloc arena 数量和空闲页规模),期间所有命令排队等待。不建议在流量高峰时手动触发。

执行后观察变化:

  • used_memory 不变(没删 key)
  • used_memory_rss 可能下降(如从 4.0GB → 3.2GB)
  • mem_fragmentation_ratio 向 1.0~1.2 靠拢
  • evicted_keys、expired_keys 等指标完全不变

注意:MEMORY PURGE 不是定时任务,Redis 不会自动重试;若一次效果弱,可间隔 30 秒再试一次,但连续多次意义不大。

比 MEMORY PURGE 更有效的替代方案

当 MEMORY PURGE 效果微弱或不生效时,优先考虑这些实操路径:

  • 发 SIGUSR1 信号强制 jemalloc purge:kill -USR1 $(pidof redis-server)(对 Redis 6.0+ + background_thread yes 更有效)
  • 用 UNLINK 替代 DEL 删除大 key,避免阻塞,也减少碎片生成节奏
  • 开启主动碎片整理:CONFIG SET activedefrag yes(Redis 4.0+ 实验特性,需搭配 active-defrag-ignore-bytes 和 active-defrag-threshold-lower 调优)
  • 长期 RSS 居高不下且无法缓解?考虑滚动重启从节点,或启用 FLUSHDB ASYNC 清库后重建

真正难处理的,是小对象高频增删导致的细碎空闲页 —— jemalloc 对这种场景几乎不归还,MEMORY PURGE 也无能为力。这时候得从业务侧收敛 value 大小、避免短生命周期小 key 泛滥。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
视频服务器配置参数有哪些
视频服务器配置参数有哪些

视频服务器配置参数有处理器、内存、存储、视频编解码器、网络接口、视频输入输出接口、操作系统、安全性、环境适应性和成本。在搭建视频服务器时,需要根据实际需求和预算,合理选择这些参数,以实现高性能、高稳定性和低成本的目标。

2023.10.17

4560

11

linux的操作系统介绍
linux的操作系统介绍

Linux是一个灵活、稳定、安全的操作系统,适用于各种不同的应用场景,从个人电脑到服务器和嵌入式系统。想了解更多Linux的相关内容,可以阅读本专题下面的文章。

2024.03.20

3566

12

Linux操作系统的主要用途
Linux操作系统的主要用途

Linux操作系统用途广泛,包括:服务器运营,软件开发,科学研究和教育,嵌入式系统,以及个人电脑和笔记本电脑。想了解更多Linux的相关内容,可以阅读本专题下面的文章。

2024.03.21

6259

8

linux操作系统的作用
linux操作系统的作用

linux操作系统在以下领域发挥着关键作用:服务器和云计算;嵌入式系统;个人电脑和笔记本电脑;超级计算;其他领域等等。想了解更多linux操作系统的相关内容,可以阅读本专题下面的文章。

2024.04.12

2915

5

有哪些常见的网络操作系统
有哪些常见的网络操作系统

常见的网络操作系统有windows server、linux、unix、macos server、freebsd、cisco ios、juniper junos和hp-ux等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.09.12

3484

6

32位操作系统怎么改成62位的
32位操作系统怎么改成62位的

要将 32 位操作系统升级到 64 位,需要遵循以下步骤:1. 检查硬件和软件兼容性;2. 备份数据;3. 获取 64 位操作系统;4. 创建可启动安装媒体;5. 从安装媒体启动计算机;6. 选择“升级”选项;7. 完成安装。

2025.04.02

3463

9

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4509

19

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.14

4035

11

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.02

7492

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习