IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Redis 内存碎片 -> 正文阅读

[大数据]Redis 内存碎片

一、Redis 内存碎片

内存碎片是指在内存分配的时候,产生的不能重复利用的空间。例如,内存空间还有3K,应用程序想申请连续的3K空间,虽然内存空间够,但是空间分配为2K,1K,总空间够,但是不连续,导致应用程序申请失败,这种无法利用的内存空间称之为"内存碎片"。内存分片会占用操作系统分配给redis的内存空间,严重影响redis性能。

二、内存碎片形成原因

1、内因

内存分片策略引发:redis默认使用jemalloc分配器分配内存。jemalloc每次分配2*N固定空间,例如写入数据申请10K空间,jemalloc会分配16K空间,优点:下次写入>=6K数据不需要申请内存空间,缺点造成内存浪费。

2、外因

修改内存中数据:修改包括增加和减少内存占用,例如原来的16K空间数据,增加或减少1K都会造成内存浪费。大量内存碎片的存在,会造成redis实际内存使用率降低,影响性能。

三、查看内存碎片

info memory 查看redis内存使用情况,主要关注以下参数

used_memory:? ? ? ? ? ? ? ? ?redis分配的内存总量单位为b
used_memory_human:? ? ? redis分配的内存总量单位为M
used_memory_rss:? ? ? ? ? ?redis向操作系统申请的内存总量单位为b
used_memory_rss_human: redis向操作系统申请的内存总量单位为M
mem_fragmentation_ratio:? ? ?内存碎片率
mem_allocator:jemalloc-5.1.0 内存分配器

mem_fragmentation_ratio计算公式为:used_memory_rss/used_memory?该值大于1但小于1.5,这种情况是合理的。

该值过高时考虑清理内存,例如该值大于1.5表示有50%空间浪费,需要清理内存碎片。

?

四、内存碎片清理

内存碎片清理,就是将不连续的内存空间重新整理为连续空间,由于redis是单线程,在清理过程中会造成堵塞,降低性能。可通过以下三种方式清理:
?

1、手动清理内存碎片

memory purge 只支持jemalloc内存分配器

2、自动清理

修改redis.conf配置文件
activedefrag yes 开启自动清理内存碎片,命令开启:config set activedefrag yes

active-defrag-ignore-bytes 100mb 内存碎片的字节数达到100M时开始清理

active-defrag-threshold-lower 10 内存碎片空间占操作系统分配给redis的总空间比例达到 10% 时开始清理

active-defrag-ignore-bytes与active-defrag-threshold-lower 两个条件同时满足会触发内存碎片清理,当有一个不满足则停止清理

active-defrag-threshold-upper 100 内存碎片超过 100%,则尽最大努力整理

active-defrag-cycle-min 1 自动清理过程所用CPU时间的比例不低于1%,保证能正常清理

active-defrag-cycle-max 25 自动清理过程所用CPU时间的比例不高于25%,超过25%停止清理,避免redis主线程阻塞

active-defrag-max-scan-fields 1000 自动清理过程中长度小于1000的set/hash/zset/list才会进行自动清理

----以上参数默认注释----

3、重启redis

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-09-15 02:04:35  更:2022-09-15 02:05:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 11:05:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码