Redis学习笔记-内存碎片对性能的影响
有时候在使用 Redis
的时候会遇到这样一个现象,已经删除了很多数据,但是 Redis
还是占用了很多内存,这是因为数据删除后,Redis
释放的内存空间会由内存分配器管理,并不会立即返回给操作系统,Redis
释放的内存空间可能并不是连续的,这些不连续的内存空间很有可能处于一种闲置状态,这篇文章学习一下内存碎片是如何产生的,然后如何在不影响 Redis
性能情况下进行内存碎片清理。
1.笔记图
2.内存碎片
操作系统的剩余内存空间总量足够,应用程序申请的是一块连续地址空间的 N
字节,但在剩余的内存空间中,没有大小为 N
字节的连续空间,这些剩余空间就是内存碎片
2.1 形成原因
-
内因:内存分配器的分配策略
-
内存分配器一般是按固定大小来分配内存,而不是完全按照应用程序申请的内存空间大小给程序分配
-
Redis
可以使用libc
、jemalloc
、tcmalloc
多种内存分配器来分配内存