<返回更多

redis内存碎片

2020-07-31    
加入收藏

内存碎片的产生与对数据进行的操作,数据的特点等有关,与使用的内存分配器也有关。如果redis服务器的内存碎片很大,可以通过安全重启的方式减少内存碎片,重启后,redis重新从备份文件中读取数据,在内存中进行重排,为每个数据重新选择合适的内存单元,减少内存碎片

linux采用著名的伙伴系统buddy system算法来解决外碎片问题。把所有的空闲页框分组为11个块链表,每个链表分别包含大小为1,2,4,8,16,32,64,128,256,512,1024连续的页框,对1024页框的最大请求对应着4MB大小的连续RAM(每页大小为4KB),每个块的第一个页框的物理地址是该块大小的整数倍,例如,大小为16个页框的块,其起始地址是16*2^12的倍数。

我们通过一个例子来说明伙伴算法的工作原理,假设现在要请求一个256个页框的块(1MB),算法步骤如下:

下图比较形象地描述了该过程。

redis内存碎片

 

以上过程的逆过程,就是页框块的释放过程,也是该算法名字的由来,内核试图把大小为B的一对空闲伙伴块合并为一个2B的单独块,满足以下条件的两个块称之为伙伴:

该算法是递归的,如果它成功合并了B,就会试图去合并2B,以再次试图形成更大的块。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>