目录

序言:

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中内存碎片处理相关推荐

  1. Redis中数据结构和编码详细图解(应用场景及优缺点)

    专业术语 sds:simple dynamic string 简单动态字符串,redis自己开发的一个字符串的抽象类型 embstr:embedded sds string embstr编码的SDS, ...

  2. Redis中“万金油“的string,为什么不好用了

    分享一个曾经使用Redis时遇到的需求以及解决方案 当时,要开发一个图片存储系统,要求这个系统能快速地记录图片ID,和图片在存储系统中保存时的ID(可以直接叫作图片存储对象ID).同时,还要能够根据图 ...

  3. redis之内存碎片问题如何解决

    写在前面 本文一起看下如何处理Redis的内存碎片问题. 1:什么是内存碎片 当操作系统内存充足,但是却无法申请连续N字节内存空间时,这些剩余的内存空间就叫内存碎片. 2:内存碎片是如何形成的 内存碎 ...

  4. redis中对象存储内存占用预估和相关对象

    redis中数据类型的使用,并发问题,list重复插入问题,redis使用实例-简单消息队列和排名统计_深山猿的博客-CSDN博客_redis 不重复的list java对象应该存成string还是m ...

  5. 存储在Redis中的数据多大比较合适

    存储在Redis中的数据多大比较合适 背景 过大的数据对 Redis 的影响 『过大』的定义是什么 结论 背景 本文是工作中应对一个实际业务场景的调研总结过程.在使用 redis 作为数据缓存的时候, ...

  6. java必学之Redis中的数据结构

    目录 一.String不在适用Redis底层数据结构 1.String类型的内存消耗问题 2:String类型怎么保存数据 2.1RedisObject结构体: 2.2int.embstr和raw这三 ...

  7. 函数指针--Nginx和Redis中两种回调函数写法

    1.Nginx和Redis中两种回调函数写法 #include <stdio.h>//仿Nginx风格 //结构外声明函数指针类型 typedef void (*ngx_connectio ...

  8. Redis初学:14(Redis中的事务)

    Redis中的事务 Redis的事务定义 Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中,不会被其他客户端发送来的命令请求所打断. Redis事务的主 ...

  9. Redis中字符串string数据类型(保存(设置键值、过期时间、设置多个键值、追加值)、获取(获取单一键值、获取多个键值))

    字符串类型是 Redis 中最为基础的数据存储类型,它在 Redis 中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等.在Redis中字符串类型的V ...

  10. php redis删除所有key,redis中批量删除key的方法

    Redis是一个高性能的key-value数据库.redis中可以借助Linux的xargs指令来批量删除key,也可以使用flushdb和flushall命令删除所有key. 批量删除Key Red ...

最新文章

  1. ArcObjects编程方法(七):.NET中继承ArcGIS COM类
  2. 转——idapython import site failed
  3. python 怎么调用 矩阵 第几行_python工厂第19层 多重列表1
  4. 小米手机抓取Log教程
  5. C++11 | 正则表达式(4)
  6. MATLAB图像拼接算法及实现(一)
  7. 可替换MPS MP2451的高压DCDC芯片FS2451助力智能电表设计40V0.5A降压IC
  8. 4种方法解决js跨域的实现方式
  9. 【资源篇】在线下载B站视频(免安装)
  10. 【虹科科普】信号发生器分类及任意波形发生器原理
  11. 今天去地坛书市淘书了
  12. 【自走棋】地图格子高亮效果
  13. 数据挖掘与数据分析(二)—— 探索性数据分析EDA(单因子与对比分析) 可视化 (1) —— 集中趋势 离中趋势 数据分布(偏态系数峰态系数正态分布三大分布)抽样理论(误差精度)
  14. VUE二级/多级路由配置方式(嵌套路由)
  15. oracle之trunc函数
  16. 网络基础:(二)路由选择基础与静态路由
  17. java list集合包含_Java 中的集合类包括 ArrayList 、 Linke
  18. 波特率、比特、字、千字节、兆、G之间转换
  19. 基于CKEditor网页富文本编辑工具转PDF文件的技术预研分析报告
  20. BZOJ1005 [HNOI2008]明明的烦恼

热门文章

  1. 移动Web UI库(H5框架)
  2. html打印预览空白,打印预览空白,网页打印空白原因及解决办法汇总
  3. Web应用程序安全原理(Web服务面临的威胁)
  4. 如何防止editor中出现遮行的现象
  5. 基于计算机视觉原理的自主足球机器人位置规划,基于计算机视觉原理的自主足球机器人位置规划...
  6. 三维重建(SFM):图像形变对重建的影响与优化
  7. python 机器翻译免费接口调用
  8. 计算机网络基础知识总结,就这一篇了
  9. ArduinoUNO-IRremote 红外线接收模块使用(还没写完)
  10. 计算机联锁静态数据表,计算机联锁功能.doc