讲师中心 微信公众号
AI工具推荐 视频效率加速

Redis如何应对内存碎片导致被误判为内存已满

阿强大大_2460

阿强大大_2460

发布时间:2026-04-06 09:23:24

|

402人浏览过

|

来源于php中文网

原创

OOM是内存碎片导致的“假满”:used_memory未超maxmemory但used_memory_rss过高,mem_fragmentation_ratio>1.5即需警惕;Redis 4.0+可通过config set activedefrag yes等动态开启自动整理。

redis如何应对内存碎片导致被误判为内存已满

为什么 used_memory 没超 maxmemory 却报 OOM?

这是内存碎片最典型的“假满”现象:Redis 显示 used_memory 还剩几百 MB,但执行写命令时却直接返回 OOM command not allowed when used memory > 'maxmemory'。根本原因不是数据真满了,而是 used_memory_rss(操作系统分配的物理内存)严重膨胀,jemalloc 无法从碎片中凑出一块连续内存来满足当前申请——哪怕总空闲字节数看起来足够。

怎么快速确认是碎片惹的祸?

立刻查 info memory,重点关注三行:

  • used_memory:Redis 自己“认为”用了多少(干净数据+缓冲区等)
  • used_memory_rss:系统实际塞给它的物理内存(含碎片+共享库+堆栈)
  • mem_fragmentation_ratio:= used_memory_rss / used_memory,>1.5 就得警惕,>2.0 基本就是碎片卡死你了

如果 mem_fragmentation_ratio > 1.5,且 used_memory 明显低于 maxmemory,那 90% 是碎片导致的伪 OOM。

Redis 4.0+ 怎么开自动碎片整理?

别重启!用 config set 动态开启,但参数必须配对生效:

  • config set activedefrag yes:开关打开(必须第一步)
  • config set active-defrag-ignore-bytes 100mb:碎片绝对值 ≥100MB 才触发(防小碎屑白忙)
  • config set active-defrag-threshold-lower 10:碎片占比 ≥10% 才启动(两个条件需同时满足)
  • config set active-defrag-cycle-min 25 和 active-defrag-cycle-max 75:控制整理过程吃 CPU 的比例,避免卡住主线程

⚠️ 注意:active-defrag-ignore-bytes 和 active-defrag-threshold-lower 是“与”关系,缺一不可;改完不会立刻生效,要等下一次满足条件的内存分配/释放事件触发。

为什么开了 activedefrag 还没反应?

常见盲区:

  • 你的 Redis 版本必须 ≥4.0(redis-server --version 确认),旧版只能靠重启或换分配器
  • 整理只在内存分配器(jemalloc)层面进行,不涉及 RDB/AOF 文件或 Swap,别指望它清理磁盘文件
  • 如果 mem_fragmentation_ratio
  • 大键(>1MB)反复 APPEND 或 SET 修改,会产生巨量外部碎片,自动整理可能跟不上节奏,得配合拆键或定期 MEMORY PURGE(6.0+)

真正卡住的点往往不在开关开没开,而在阈值设太保守、或者根本没意识到 rss 和 used_memory 不是一回事。

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

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

5167

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2288

2023.08.10

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

5167

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2288

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

3818

2023.08.10

append用法
append用法

append是一个常用的命令行工具,用于将一个文件的内容追加到另一个文件的末尾。想了解更多append用法相关内容,可以阅读本专题下面的文章。

598

2023.10.25

python中append的用法
python中append的用法

在Python中,append()是列表对象的一个方法,用于向列表末尾添加一个元素。想了解更多append的更多内容,可以阅读本专题下面的文章。

1476

2023.11.14

python中append的含义
python中append的含义

本专题整合了python中append的相关内容,阅读专题下面的文章了解更多详细内容。

2244

2025.09.12

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

80

2026.09.30

热门下载

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

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn