Memcache 内存分配策略

本文深入探讨了Memcached中用于解决内存碎片问题的SlabAllocator机制。SlabAllocator通过预分配固定大小的内存页,将其分割成不同尺寸的块(chunk),并组织成组(chunk集合),实现了高效内存管理和减少碎片的目标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

memcached默认采用了名为Slab Allocator的机制分配和管理内存。
在该机制出现以前,内存的分配是通过对所有记录简单的进行mallocfree来进行了。但是这种方式会导致内存碎片化严重,加重操作系统内存管理器的负担。Slab Allocator就是位了解决该问题而诞生的。

Slab Allocator的基本原理是:按照预先规定的大小,将分配的内存以page为单位,默认情况下一个page是1M(可以通过-I参数在启动memcached的时候指定),分割成各种尺寸的块(chunk),并把尺寸相同的块(chunk)分成组(chunk集合)。如果需要申请内存时,memcached会划分出一个新的page并分配给需要的slab区域。
page一旦被分配,在memcached重启前不会被回收或者重新分配,以解决内存碎片问题。

slab的内存分配具体过程如下:
memcached在启动的时候通过-m参数指定最大内存,但是这个不会一启动就占用完,而是逐步分配给各个slab的。如果一个新的数据要被存放,首选选择一个合适的slab,然后查看该slab是否还有空闲的chunk,如果有则直接存放进去;如果没有则要进行申请,slab申请内存是以page为单位的,无论大小为多少,都会有1M大小的page被分配给该slab。
申请到page后,slab会将这个page的内存按chunk的大小进行切分,这样就变成了一个chunk的组,再从这个chunk组中选择一个用于存储数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值