多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
* 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