肉渣教程

Memcached 内存管理

上一节 下一节

Memcached是基于内存进行缓存的,而具体的内存管理方式则是基于Slab Allocation机制


Memcached 内存管理

Memcached的内存管理使用的是Slab Allocation方式。该机制出现前,内存的分配若简单地使用malloc和free来进行,则很容易导致内存碎片,加重对内存资源的消耗。

而Slab Allocation的基本原理则是将分配的内存分割成各种尺寸的块(chunk);并把尺寸相同的块(chunk)分成组(chunk的集合)。这种特定大小的组就是下图中的某个Slab;而分配给单个Slab的内存空间,就是所谓的Page;Memcached中默认的Page大小为1MB。

当Memcached要把某个数据存入内存中,则会根据该数据的大小,选择最适合该数据大小的Slab中的某个空闲的块(chunk)进行数据缓存

Slab Allocation的不足之处

Slab Allocation机制也是存在一些弱点的,比如将108字节(byte)的数据存入128字节大小的chunk块中,则剩余的20字节的内存则无法利用,也就是被浪费了。目前该问题还没有完美的解决方案,不过还是根据具体情况,使用growth factor进行优调。

但是这里并不建议这种方式,不应该把精力花在这个细节问题上,这里唯一推荐的解决方式就是用钱砸,简单、直接、有效。


另外,Slab Allocation是会重复使用已分配的内存,因此被分配到的内存是不会释放,而是留着继续重复使用。正因为这种机制,Memcached的进程的稳定性相对都很高。


Memcached 内存管理

上一节 下一节