简单理解Memcached的Slab Allocation
来源:互联网 发布:工信部网站域名查询 编辑:程序博客网 时间:2024/05/01 20:42
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。其结构图如下:
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二三事儿
- 简单理解Memcached的Slab Allocation
- 简单理解Memcached的Slab Allocation
- 简单理解Memcached的Slab Allocation
- 简单理解Memcached的Slab Allocation
- Memcached的item和slab
- slab 着色的理解
- slab 着色的理解
- MEMCACHED(3) SLAB内存池
- memcached-内存管理机制slab allocator
- slab着色理解
- memcached之理解memcached的内存存储
- memcached之理解memcached的内存存储
- [Memcached]理解 Memcached 的内存存储
- Memcached(3)-------Memcached的内存存储理解
- memcached-2-理解memcached的内存存储
- Memcached的简单使用
- memcached源码分析-----slab automove和slab rebalance
- 分布式缓存系统Memcached(六)——slab和item的主要操作
- android弹出窗口实现
- Python 私有属性与内部方法
- iOS 常用:点击屏幕和return退出隐藏键盘和解决虚拟键盘挡住UITextField的方法
- Window下让JAR在后台运行的方法
- msql小技巧
- 简单理解Memcached的Slab Allocation
- 01-表单提交的方式
- 01-表单提交的方式
- 表单提交的方式
- getActionBar为null的解决办法
- const与指针
- 老版本出现"-fembed-bitcode"错误解决办法
- 3.打开bios的方式
- tomcat8配置https双向认证