`
zyslovely
  • 浏览: 230332 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

memcached内存分配原理

 
阅读更多
http://xenojoshua.com/2011/04/deep-in-memcached-how-it-works/


Page为内存分配的单位
Memcached的内存分配以page为单位,默认情况下一个page是1M,可以通过-I参数修改,最小1K,最大128M。如果需要申请内存时,memcached会划分出一个新的page并分配给需要的slab区域。page一旦被分配在memcached重启前不会被回收或者重新分配(page ressign已经从1.2.8版移除了)

Slabs划分数据空间
Memcached并不是将所有大小的数据都放在一起的,而是预先将数据空间划分为一系列大小的slabs,每个slab只负责一定大小范围内的数据存储。每个slab只存储大于其上一个slab的size并小于或者等于自己最大size的数据。例如:slab 3只存储大小介于137 到 224 bytes的数据。如果一个数据大小为230byte的数据进行存储,它将被分配到slab 4中。每个slab负责的空间其实是不等的,memcached默认情况下下一个slab的最大值为前一个的1.25倍,这个可以通过修改-f参数来修改增长比例。


Chunk才是存放缓存数据的单位
Chunk是一系列固定的内存空间,这个大小就是管理它的slab的最大存放大小。例如:slab 1的所有chunk都是104byte,而slab 4的所有chunk都是280byte。chunk是memcached实际存放缓存数据的地方,因为chunk的大小固定为slab能够存放的最大值,所以所有分配给当前slab的数据都可以被chunk存下。如果实际的数据大小小于chunk的大小,空余的空间将会被闲置,这个是为了防止内存碎片而设计的。举例来说,如果chunk size是224byte,而存储的数据只有200byte,剩下的24byte将被闲置。此外,memcached允许配置的最小的chunk空间为48个字节(key+value+flags),通过-n参数可以调节这个数值。

2. 理解这三者之间的关系
要理解memcached是如何分配内存的就要从理解上述三个东西之间的关系开始。
page是memcached在收到内存不够的请求,并进行内存分配的单位。举例来说,slab2的所有空间都用完了,又有大小适合slab2的数据过来了,那么slab2就会向memcached请求新的内存空间,memcached就会划分一个page大小的内存量到slab2。page的默认大小是1M,这个数值可以通过参数-I来修改。
slab是memcached用来划定存储空间的大小概念,每当memcached启动的时候,它会按照-n参数配置的值(如果有的话,否则为默认值)来决定第一个slab的大小,然后根据-f参数的值来决定后续slab大小的增长速率,一个一个地决定后续的slab的大小,直到slab的大小达到设定的page大小(一般是1M)。
chunk是实际用来存储数据的内存空间,它的大小和包含它的slab的大小是一致的。当page大小的内存分配到slab的时候,slab会根据自身的大小将page大小的内存分割成 page / slabsize 个chunk。
memcached启动时候,slab创建以及chunk分配的细节可以参照下面的数据(使用-vv命令查看的详细内存分配过程)。
分享到:
评论

相关推荐

    Memcached内存分配与SLAB机制

    ### Memcached内存分配与SLAB机制 #### 第1章 前言 本文将深入探讨Memcached中的内存分配原理及SLAB机制的核心概念。通过详细分析Memcached如何管理内存资源,帮助读者理解其高效内存利用背后的逻辑。 #### 第2章...

    memcached的内存分配代码

    本文将深入探讨memcached的内存分配代码,理解其背后的机制,并讨论如何通过优化内存分配来提升系统的性能。 在Memcached中,内存管理是至关重要的,因为它直接影响到服务的性能和效率。memcached采用了一种特殊的...

    PHP内存缓存技术memcached 的安装和工作原理介绍

    - `-m 128` 设置分配给memcached的内存大小,这里是128MB。 - `-l 192.168.1.1` 指定监听的IP地址。 - `-p 11211` 设置监听的TCP端口,默认为11211。 - `-u httpd` 指定运行memcached的用户,通常为Web服务器用户。 ...

    Memcached 原理和使用详解

    4. **自主内存管理**:Memcached内部管理内存,自动处理内存分配和回收,无需外部干预。 5. **分布式存储**:数据分布在多个服务器上,通过键值对的方式实现数据的定位和分发,每个实例独立管理自己的数据。 **安装...

    基于内存的K-V数据平台(Memcached)

    通过阅读源码,可以深入了解其内部机制,如哈希表的实现、内存分配策略、网络通信细节等。 总结来说,Memcached是一个高效的K-V数据平台,广泛应用于各种需要高速缓存的场景。尽管它没有提供持久化和复杂的数据结构...

    Memcached的原理和使用详解

    Memcached采用了一种称为“slab allocator”的内存分配机制,它可以预先分配不同大小的内存块,并根据键值对的大小自动选择合适的内存块进行存储。这样既避免了频繁的小内存分配和回收带来的性能开销,也提高了内存...

    网上收集最新的Memcached学习资料

    调优主要包括:内存分配优化,根据业务需求合理设置内存大小;调整 slab 分配策略,避免内存浪费;监控和调整超时时间,确保高并发下系统的响应速度。 七、Memcached与Linux的关系 在Linux环境下,Memcached可以...

    Memcached原理和使用详解

    - **自主内存管理**:Memcached使用了一种称为“slab allocator”的内存分配策略来管理内存,该策略可以有效避免内存碎片问题,并且支持不同大小的对象存储。 #### 安装与使用 Memcached的安装过程相对简单,主要...

    memcached1.4.31

    - **预分配内存**:为了避免频繁的内存分配和释放,Memcached 会在启动时根据配置预先分配内存,提高系统性能。 - **并发处理**:Memcached 支持多线程模型,可以同时处理多个客户端的请求,提升了服务的并发性。 ...

    memcached-win64.rar

    6. **预分配内存**:为了减少内存碎片,Memcached会在启动时预先分配一大块内存,然后在需要时按需分配。 7. **线程模型**:Memcached采用单线程非阻塞I/O模型,通过事件驱动机制处理并发请求,提高了处理效率。 8...

    memcached源代码分析

    《memcached源代码分析1.ppt》通常会提供更直观的视觉呈现,包括流程图、内存分配示意图、性能优化策略等。PPT可能涵盖了以下内容: 1. **系统架构**:展示memcached的服务器-客户端通信模型,以及网络协议实现(如...

    缓存服务器memcached下载

    3. **合理分配内存**:根据服务器资源和应用需求,合理分配Memcached的内存大小。 4. **负载均衡**:在分布式环境中,合理规划服务器集群,确保数据均匀分布。 5. **监控与维护**:定期检查Memcached的性能指标,...

    Memcached缓存技术资料源码

    3. **预分配内存**: 启动时,Memcached会一次性分配所有内存,避免频繁的内存分配操作影响性能。 4. **TCP/UDP协议**: 提供TCP和UDP两种通信协议,其中UDP适合于短小且无状态的数据传输,能减少网络延迟。 **三、...

    memcached全面剖析.pdf

    memcached的内存存储基于一种称为Slab Allocation的机制,该机制通过分配固定大小的内存块(Slabs)来存储数据。这种机制有助于减少内存碎片问题,并提高内存使用效率。尽管Slab Allocation机制高效,但也存在一些...

    29道memcached面试题含答案(很全)

    6. Memcached内存管理机制原理: - Slab Allocation:内存被划分为多个大小固定的块(slabs),每个slab包含多个chunk(数据存储单元)。同一slab的chunk大小相同,避免了内存碎片,简化了内存分配与释放。 ...

    Memcached完全剖析(转)

    1. **分布式**: Memcached 不依赖于特定的硬件或软件环境,它可以根据服务器集群的IP地址自动分配数据,实现分布式存储。 2. **高性能**: 由于数据存储在内存中,Memcached具有极快的读写速度。此外,它使用非阻塞I...

    memcached1.4.6

    6. 启动memcached服务,可以使用`memcached -d -m 64 -p 11211 -u nobody`命令,参数分别代表启动守护进程、分配的内存大小、监听端口和运行用户。 **配置memcached服务**: 通常,为了使memcached服务长期稳定运行...

    memcached.zip

    - **预分配内存**: memcached支持内存预分配,避免动态增长导致的性能下降。 - **一致性哈希**: 在分布式环境中,一致性哈希可以减少数据迁移时的影响。 ### 6. memcached与其他缓存系统的比较 - **Redis**: ...

    memcached-1.5.11.tar.gz

    1. 内存管理:Memcached采用slab分配机制管理内存,将内存分为多个 slab 分区,每个分区内部又细分为多个chunk,以减少内存碎片。 2. 数据存储:键值对存储,键必须是字符串,值可以是任意类型(转换为二进制)。每...

Global site tag (gtag.js) - Google Analytics