简单理解Memcached的Slab Allocation
2015-11-20 11:18
579 查看
Memcached利用Slab Allocation机制来分配和管理内存。传统的内存管理方式是:使用完通过malloc分配的内存后通过free来回收内存。这种方式容易产生内存碎片并降低操作系统对内存的管理效率。Slab Allocation机制不存在这样的问题,它按照预先规定的大小,将分配的内存分割成特定长度的内存块,再把尺寸相同的内存块分成组,这些内存块不会释放,可以重复利用。
Memcached服务器端保存着一个空闲的内存块列表,当有数据存入时根据接收到的数据大小,分配一个能存下这个数据的最小内存块。这种方式有时会造成内存浪费,例如:将一个200字节的数据存入一个300字节的内存块中,会有100字节内存被浪费掉,不能使用。避免浪费内存的办法是,预先计算出应用存入的数据大小,或把同一业务类型的数据存入一个Memcached服务器中,确保存入的数据大小相对均匀,这样就可以减少对内存的浪费。还有一种办法是,在启动时指定“-f”参数,能在某种程度上控制内存组之间的大小差异。在应用中使用Memcached时,通常可以不重新设置这个参数,使用默认值1.25进行部署。如果想优化Memcached对内存的使用,可以考虑重新计算数据的预期平均长度,调整这个参数来获得合适的设置值。
Slab Allocation的原理——将分配的内存分割成各种尺寸的块(chunk), 并把尺寸相同的块分成组(chunk的集合),每个chunk集合被称为slab。
Memcached的内存分配以Page为单位,Page默认值为1M,可以在启动时通过-I参数来指定。
Slab是由多个Page组成的,Page按照指定大小切割成多个chunk。其结构图如下:
通过memcached-tool查看指定memcached实例的不同slab状态,可以看到各Item所占大小(chunk大小)差距为1.25
每个slab的chunk大小是固定的,当item的占用空间实际小于chunk大小时,会出现内存浪费
每个slab的大小是固定的(因为page是固定的),当slab不能被他所拥有的chunk整除时,会出现内存浪费
按照Growth Factor因子生成指定大小的slab,而某slab id根本未被使用时,会出现内存浪费
Memcache内存分配策略
Memcached二三事儿
转至:http://www.xiaoxiaozi.com/2013/04/29/2432/
Memcached服务器端保存着一个空闲的内存块列表,当有数据存入时根据接收到的数据大小,分配一个能存下这个数据的最小内存块。这种方式有时会造成内存浪费,例如:将一个200字节的数据存入一个300字节的内存块中,会有100字节内存被浪费掉,不能使用。避免浪费内存的办法是,预先计算出应用存入的数据大小,或把同一业务类型的数据存入一个Memcached服务器中,确保存入的数据大小相对均匀,这样就可以减少对内存的浪费。还有一种办法是,在启动时指定“-f”参数,能在某种程度上控制内存组之间的大小差异。在应用中使用Memcached时,通常可以不重新设置这个参数,使用默认值1.25进行部署。如果想优化Memcached对内存的使用,可以考虑重新计算数据的预期平均长度,调整这个参数来获得合适的设置值。
Slab Allocation的原理——将分配的内存分割成各种尺寸的块(chunk), 并把尺寸相同的块分成组(chunk的集合),每个chunk集合被称为slab。
Memcached的内存分配以Page为单位,Page默认值为1M,可以在启动时通过-I参数来指定。
Slab是由多个Page组成的,Page按照指定大小切割成多个chunk。其结构图如下:
Growth Factor
memcached在启动时通过-f选项可以指定 Growth Factor因子。该值控制slab之间的差异,chunk大小的差异。默认值为1.25。通过memcached-tool查看指定memcached实例的不同slab状态,可以看到各Item所占大小(chunk大小)差距为1.25
Slab Allocation的缺点
Slab Allocation可以有效的解决内存碎片问题,但是在如下情况下,会导致内存的浪费:每个slab的chunk大小是固定的,当item的占用空间实际小于chunk大小时,会出现内存浪费
每个slab的大小是固定的(因为page是固定的),当slab不能被他所拥有的chunk整除时,会出现内存浪费
按照Growth Factor因子生成指定大小的slab,而某slab id根本未被使用时,会出现内存浪费
参考资料
memcached全面剖析–2.理解memcached的内存存储Memcache内存分配策略
Memcached二三事儿
转至:http://www.xiaoxiaozi.com/2013/04/29/2432/
相关文章推荐
- 剖析Memcached分布式内存对象缓存系统的工作原理
- 网站缓存技术总结( ehcache memcache redis)
- 关于mongodb ,redis,memcache之间见不乱理还乱的关系和作用
- memcached相关
- memcached在windows下的安装与命令使用方法
- 在Linux上安装Memcached服务
- JAVA MemCache 史无前例的详细讲解【转】
- tlinux(CentOS)下memcached 安装与使用
- 为什么不能用memcached存储Session
- memcache(使用telnet操作)
- 阿里云Ubuntu 14.04.2 memcached安装后客户端连接时提示no route to host
- tomcat使用memcached完成集群(session共享实现方式)
- MSM--Memcached_Session_Manager介绍及使用
- Memcached, Redis, MongoDB三者比较
- Window下memcached安装与测试步骤
- LNMP 添加 memcached服务
- xampp + windows 配置 memcache流程
- Memcached
- MemCached学习笔记
- 解决百度地图com.baidu.platform.comjni.map.commonmemcache.JNICommonMemCache.Create:()J问题