* Slab Allocation机制:整理内存以便重复使用
memcached默认情况采用slab allocator的机制来分配管理内存,在该机制出现之前,内存的分配是通过对所有记录简单进行malloc和free来进行,但是这种方式会导致内存碎片,加重操作系统内存管理的负担。
* Slab Allocation的原理
将分配的内存分割成各种尺寸的块(chunk),并把尺寸相同的块分成组(chunk的集合)
![](https://box.kancloud.cn/ba4a7f439286efc4618e378c24f867c1_706x484.png)
术语:
Page:
分配给Slab的内存空间,默认为1MB,分配给slab之后根据slab的大小分成chunk
chunk:
用于缓存记录的内存空间
slab class:
特定大小的chunk的组
* memcached如何针对客户端发送的数据选择slab并缓存到chunk中
memcached根据收到的数据的大小,选择最适合数据大小的slab,memcached中保存着slab内空闲chunk的列表,根据该列表选择chunk,然后数据缓存与其中
* slab allocator的缺点
由于分配的是特定长度的内存,因此无法有效利用分配的内存,例如将100字节的数据缓存到128字节的chunk中,剩余28字节就浪费
* 使用Growth Factor进行调优
使用增长因子,在某种程度上控制slab之间的差异,默认为1.25,我们可以通过编写/etc/sysconfig/memcached中options=" -f 1.1"
6、查看stats的使用状况
~~~
[root@node7 ~]# memcached-tool localhost:11211
# Item_Size Max_age Pages Count Full? Evicted Evict_Time OOM
1 96B 4s 1 1 yes 0 0 0
2 120B 44s 1 1 yes 0 0 0
~~~
说明:
#: 表示slab class的编号
Item_Size chunk大小
Max_age 从创建开始到现在,过了多久咯(生存时间)
pages: 分配给slab的内存页数
count: slab内的记录数
full?: slab内是否仍有空闲chunk