`
javantsky
  • 浏览: 83662 次
  • 性别: 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源码分析之内存管理

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

    memcached-win64.rar

    memcached-win64好用的内存管理机制,可以让程序和性能发挥 出色运行特征。受开发者的首选。它是64位的。

    Memcached v1.5.7 For Windows (附带Memcached和libevent源码两个版本)

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的...

    ydx_slab_util:实现一个内存池,内存管理机制借鉴memcached,使用一系列链表管理不同大小的内存区块

    ydx_slab_util实现一个内存池,内存管理机制借鉴memcached,使用一系列链表管理不同大小的内存区块。memcached一次分配(默认64M)固定大小的内存区域,使用完毕后使用LRU淘汰最早不使用的内存段。作为一个通用内存池...

    memcached全面剖析–2.理解memcached的内存存储

    但是,这种方式会导致内存碎片,加重操作系统内存管理器的负担,最坏的情况下, 会导致操作系统比memcached进程本身还慢。SlabAllocator就是为解决该问题而诞生的。下面来看看SlabAllocator的原理。下面是memcached...

    Memcached v1.5.3 For Windows (附带Memcached和libevent源码)

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的...

    Memcached缓存资料

    《Memcached内存分析、调优、集群.pptx》 《NET版分布式缓存Memcached测试实例.docx》 《Memcached管理及_.NET_开发.doc》 《memcached-win32-1.4.4-14.zip》 《安装Memcached及Memcached配置.doc》 《Linux...

    Memcached v1.5.4 For Windows (附带Memcached和libevent源码两个版本)

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的...

    memcached-1.2.1-win32

    由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。因为通常网站应用程序中最耗费时间的任务是数据在数据库的检索,而多个用户查询相同的SQL时,数据库压力会增大,而...

    memcached1

    执行完毕后,我们就可以在任务管理器中见到memcached.exe这个进程了。好了,我们的服务器已经正常运行了, 下面我们就来写java的客户端连接程序。 我们将java_memcached-release_1.6.zip解压后的目录中的java_...

    Memcached v1.5.2 For Windows (在MSYS环境里Mingw-w64 x32 x64编译)

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的...

    memcached-1.4.4.tar.gz

    由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。因为通常网站应用程序中最耗费时间的任务是数据在数据库的检索,而多个用户查询相同的SQL时,数据库压力会增大,而...

    Memcached v1.6.15 For Windows(MSYS编译)

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的...

    Memcached v1.6.12 For Windows(MSYS编译)

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的...

    memcached::rabbit_face:Memcached内存中键值存储的从源构建的容器映像

    memcached(容器映像) 内存中键值存储的从源构建的容器映像标签Docker集线器在Docker Hub上以 :红帽码头在RedHat Quay上以 :特征在构建期间从源代码编译FROM scratch ,零膨胀静态链接到C标准库的实现减少攻击面...

    aiocache:用于Redis,Memcached和内存的Asyncio缓存管理器

    支持多个后端(内存,redis和memcached)的Asyncio缓存。 该库旨在简化而不是专业化。 所有缓存都包含相同的最小接口,该接口包含以下功能: add :仅在键不存在时才添加键/值。 get :检索由键标识的值。 set :...

    memcached的java示例工程

    memcached1.4.5.rar 为编译好的文件 你就不用在编译了 直接用就可以...执行完毕后,我们就可以在任务管理器中见到memcached.exe这个进程了。 好了,我们的服务器已经正常运行了, 下面我们就来写java的客户端连接程序。

    memcached权威指南

    第三章 memcached 的内存管理与删除机制.................................................................................. 9 3.1:内存的碎片化.................................................................

Global site tag (gtag.js) - Google Analytics