`
javantsky
  • 浏览: 84261 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

memcached内存管理

阅读更多

总结下我对memcached的内存管理的理解,有不对的地方请不吝指正^_^。

 

我用的版本是最新的1.4.5

 

chunk:咱cache数据的地方,数据的大小不能超过1M。

page:分配给stab class的内存页,默认为1M,chunk的内存就是在这上面划分出去的。

stab class:很多相同size的chunk在一起组成一个stab class。

 

memcached和这三者之间的关系:

memcached启动时会按尺寸生成一组stab class,stab class的数量是根据你设置的参数决定的,在整个生命周期内不会再新增。

每个stab class在启动时会预分配一个page,在这个page上划分特定size的chunk。

当一个stab class的chunk使用完成后,memcached会查找是否有空余page可以使用,如果有则将page加入该stab class,没有则执行LRU(前提是你没有使用 -M参数启动)。

 

注意:

LRU是针对stab class的,不是全memcached的。

 

看一个具体的例子

[root@p2ash004 ~]# memcached -p 11211 -u root  -m256 -n 512 -vv
slab class   1: chunk size       560 perslab    1872
slab class   2: chunk size       704 perslab    1489
slab class   3: chunk size       880 perslab    1191
slab class   4: chunk size      1104 perslab     949
slab class   5: chunk size      1384 perslab     757
slab class   6: chunk size      1736 perslab     604
slab class   7: chunk size      2176 perslab     481
slab class   8: chunk size      2720 perslab     385
slab class   9: chunk size      3400 perslab     308
slab class  10: chunk size      4256 perslab     246
slab class  11: chunk size      5320 perslab     197
slab class  12: chunk size      6656 perslab     157
slab class  13: chunk size      8320 perslab     126
slab class  14: chunk size     10400 perslab     100
slab class  15: chunk size     13000 perslab      80
slab class  16: chunk size     16256 perslab      64
slab class  17: chunk size     20320 perslab      51
slab class  18: chunk size     25400 perslab      41
slab class  19: chunk size     31752 perslab      33
slab class  20: chunk size     39696 perslab      26
slab class  21: chunk size     49624 perslab      21
slab class  22: chunk size     62032 perslab      16
slab class  23: chunk size     77544 perslab      13
slab class  24: chunk size     96936 perslab      10
slab class  25: chunk size    121176 perslab       8
slab class  26: chunk size    151472 perslab       6
slab class  27: chunk size    189344 perslab       5
slab class  28: chunk size    236680 perslab       4
slab class  29: chunk size    295856 perslab       3
slab class  30: chunk size    369824 perslab       2
slab class  31: chunk size    462280 perslab       2
slab class  32: chunk size    577856 perslab       1
slab class  33: chunk size    722320 perslab       1
slab class  34: chunk size   1048576 perslab       1

 在这里,我给memcached分配了256M内存(-m 256),chunk的初始值设置为512bytes(-n 512)

slab class   1: chunk size       560 perslab    1872

 为什么chunk size 是560呢?因为还有48bytes来存储结构信息。

slab class   2: chunk size       704 perslab    1489

 no:2的chunk size 为 704,是因为默认的增长因子是1.25,704 = 560 * 1.25 +4,后面的+4是为了内存对齐,保证为8的倍数。

no:n就类推就可以了。

 

我们可以看到memcached一个预生成了34个slab class,每个slab class占用1M内存(也就是预分配了一个page)。

还有(256-34=222)个page是可以根据需要分配给各个slab class使用的。

1
1
分享到:
评论

相关推荐

    计算机后端-PHP视频教程. Memcached12 memcached内存管理机制.wmv

    计算机后端-PHP视频教程. Memcached12 memcached内存管理机制.wmv

    Memcached内存分配与SLAB机制

    SLAB机制是Memcached内存管理的关键组成部分,它通过一种特殊的缓存机制来存储item数据。这种机制能够有效地提高内存利用率并减少内存碎片,从而提高系统的整体性能。 **SLAB机制概述:** - **SLAB(Class)定义**...

    Memcached源码分析之内存管理

    Memcached源码分析之内存管理Memcached源码分析之内存管理

    Memcached内存分析、调优、集群

    ### Memcached内存分析、调优、集群:深入理解与实践 #### 1. Memcached背景与概述 Memcached是一款高性能的分布式内存缓存服务器,它最初由LiveJournal的运营人员开发,现已成为开源社区中不可或缺的一部分。其...

    Memcached 内存分析、调优、集群

    ### Memcached内存分析、调优、集群 #### 1. Memcached背景 Memcached是一款高性能的分布式内存对象缓存系统,旨在通过减轻数据库负载来加速动态Web应用的响应速度。它通过在内存中缓存数据和对象来减少读取数据库...

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

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

    Memcached、Redis、MySQL存储层面试问题

    4. 简述Memcached内存管理机制原理? Memcached使用slab allocation机制来管理内存,每个slab分配一个固定的内存大小,用于存储对象。 5. Memcached是怎么工作的? Memcached服务器可以接受客户端的请求,检查缓存...

    Memcached 客户端 服务端 管理工具

    - **内存管理**:内存是Memcached存储数据的主要场所,它采用 slab 分配器,将内存划分为不同大小的块(slabs),每个块又包含多个固定大小的项(items)。这种设计减少了内存碎片,提高了内存利用率。 - **键值对...

    memcached源码欣赏

    `slab_automove`是memcached内存管理的关键部分,它负责将数据分配到不同的内存层级(slabs)。源码中包含的`struct window_data`和`struct slab_automove`定义了监控和决策的窗口数据结构,用于动态调整slab的分配...

    Memcached内存分析、调优、集群.ppt

    【Memcached内存分析】 Memcached是一款高性能的分布式内存缓存系统,由LiveJournal的运营团队开发,被广泛应用于包括Facebook、mixi、Digg、Wikipedia等在内的大型网站。其设计目标是减轻数据库的压力,通过将常用...

    第四十四章:Memcached高性能对象缓存1

    1. Slab Allocation 机制:Memcached 内存管理的核心是 Slab Allocator,将内存划分为固定大小的 chunk,避免内存碎片。每个 slab 对应一组相同大小的 chunk,数据根据大小被分配到合适的 slab 中。尽管可能导致空间...

    memcached管理session资源

    MSM(Memcached_Session_Manager)是一个基于Java的Memcached会话管理器,它允许我们将Web应用的session数据存储在Memcached服务器上,而不是传统的保存在服务器的内存中或者硬盘上的session文件。这样,即使服务器...

    Memcache 面试题 23道.pdf

    早期的 Memcached 内存管理方式是通过 malloc 的分配的内存,使用完后通过 free 来回收内存,这种方式容易产生内存碎片,并降低操作系统对内存的管理效率。为了解决这个问题,Slab Allocation 内存分配机制就延生了...

    memcached面试26题和答案

    #### Memcached内存管理机制 - **早期机制**: 基于malloc/free的内存管理,可能导致内存碎片问题。 - **改进方案**: 引入Slab Allocation机制。 - **Slab Allocation**: 将内存分割成多个固定大小的“slab class”...

    Memcached内存分析、调优、集群.pdf

    ### Memcached内存分析、调优、集群 #### 一、Memcached背景介绍 Memcached是一款高性能的分布式内存对象缓存系统,它通过减轻数据库负担来加速动态Web应用程序的速度。最初由LiveJournal的开发者Brad Fitzpatrick...

    memcached的内存分配代码

    在Memcached中,内存管理是至关重要的,因为它直接影响到服务的性能和效率。memcached采用了一种特殊的内存分配策略,名为Slab Allocation,以避免频繁的内存碎片和提高内存利用率。 1. Slab Allocation原理: ...

    tomcat+memcached 管理session

    `Tomcat`是一个流行的开源Java Servlet容器,而`Memcached`则是一个分布式内存对象缓存系统,常用于减轻数据库负载,提高应用性能。本篇文章将详细介绍如何使用`Tomcat`结合`Memcached`来实现高效的Session管理。 ...

    寻找我们丢失的数据

    ### 寻找我们丢失的数据——深入理解Memcached内存管理机制 #### 一、故事的开始 在日常工作中,经常会遇到由于各种原因导致的数据丢失问题。本文将以一个具体案例出发,探讨如何有效地解决这类问题,特别是在使用...

Global site tag (gtag.js) - Google Analytics