基本概念:slab,page,chunk。
slab,是一个逻辑概念。它是在启动memcached实例的时候预处理好的,每个slab对应一个chunk size,也就是说不同slab有不同的chunk size。具体分配多少个slab由参数 -f (增长因子)和 -n (chunk最小尺寸)决定的。
page,可以理解为内存页。大小固定为1m。slab会在存储请求时向系统申请page,并将page按chunk size进行切割。
chunk,是保存用户数据的最小单位。用户数据item(包括key,value)最终会保存到chunk内。chunk规格是固定的,如果用户数据放进来后还有剩余则这剩余部分不能做其他用途。
工作流程:memcahed实例启动,根据 -f 和 -n 进行预分配slab。以 -n 为最小值开始,以 -f 为比值生成等比数列,直到1m为止(每个slab的chunk size都要按8的倍数进行补全,比如:如果按比值算是556的话,会再加4到560成为8的整倍数)。然后每个slab分配一个page。当用户发来存储请求时(key,value),memcached会计算key+value的大小,看看属于哪个slab。确定slab后看里面的是否有空闲chunk放key+value,如果不够就再向系统申请一个page(如果此时已经达到 -m 参数设置的内存使用上限,则看是否设置了 -M 。如果设置了 -M 则返回错误提示,否则按LRU算法删除数据)。申请后将该page按本slab的chunk size 进行切割,然后分配一个来存放用户数据。
注意:
1,chunk是在page里面划分的,而page固定为1m,所以chunk最大不能超过1m。
2,chunk实际占用内存要加48B,因为chunk数据结构本身需要占用48B。
3,如果用户数据大于1m,则memcached会将其切割,放到多个chunk内。
4,已分配出去的page不能回收。
优化建议
1,-n 参数的设置,注意将此参数设置为1024可以整除的数(还要考虑48B的差值),否则余下来的部分就浪费了。
2,不要存储超过1m的数据。因为要拆成多个chunk,计算和时间成本都成倍增加。
3,善用stats命令查看memcached状态。
4,消灭eviction(被删除的数据)。造成eviction是因为内存不够,有三个思路:一是在CPU有余力的情况下开启压缩(PHP扩展);二是增加内存;三是调整 -f 参数,减少内存浪费。
5,调整业务代码,提高命中率。
6,缓存小数据。省带宽,省网络I/O时间,省内存。
7,根据业务特点,为数据尺寸区间小的业务分配专用的memcached实例。这样可以调小 -f 参数,使数据集中存在少数几个slab上,内存浪费较少。
- 大小: 95.6 KB
- 大小: 41.7 KB
- 大小: 28.8 KB
分享到:
相关推荐
Memcached源码分析之内存管理Memcached源码分析之内存管理
- **内存管理**:内存是Memcached存储数据的主要场所,它采用 slab 分配器,将内存划分为不同大小的块(slabs),每个块又包含多个固定大小的项(items)。这种设计减少了内存碎片,提高了内存利用率。 - **键值对...
在Memcached中,内存管理是至关重要的,因为它直接影响到服务的性能和效率。memcached采用了一种特殊的内存分配策略,名为Slab Allocation,以避免频繁的内存碎片和提高内存利用率。 1. Slab Allocation原理: ...
计算机后端-PHP视频教程. Memcached12 memcached内存管理机制.wmv
### Memcached内存分析、调优、集群 #### 1. Memcached背景 Memcached是一款高性能的分布式内存对象缓存系统,旨在通过减轻数据库负载来加速动态Web应用的响应速度。它通过在内存中缓存数据和对象来减少读取数据库...
### Memcached内存分析、调优、集群:深入理解与实践 #### 1. Memcached背景与概述 Memcached是一款高性能的分布式内存缓存服务器,它最初由LiveJournal的运营人员开发,现已成为开源社区中不可或缺的一部分。其...
SLAB机制是Memcached内存管理的关键组成部分,它通过一种特殊的缓存机制来存储item数据。这种机制能够有效地提高内存利用率并减少内存碎片,从而提高系统的整体性能。 **SLAB机制概述:** - **SLAB(Class)定义**...
MSM(Memcached_Session_Manager)是一个基于Java的Memcached会话管理器,它允许我们将Web应用的session数据存储在Memcached服务器上,而不是传统的保存在服务器的内存中或者硬盘上的session文件。这样,即使服务器...
`Tomcat`是一个流行的开源Java Servlet容器,而`Memcached`则是一个分布式内存对象缓存系统,常用于减轻数据库负载,提高应用性能。本篇文章将详细介绍如何使用`Tomcat`结合`Memcached`来实现高效的Session管理。 ...
4. **内存管理**:memcached管理内存空间,当内存不足时,会使用LRU(Least Recently Used)策略自动删除最近最少使用的数据。 5. **非持久化存储**:由于数据存储在内存中,一旦服务器重启,所有数据将丢失。因此,...
2. **性能监控**:memadmin可以实时显示memcached服务器的运行状态,包括命中率、内存使用情况、连接数等关键指标,帮助管理员及时发现和解决问题。 3. **统计分析**:提供统计报告,包括访问频率、缓存命中率等,...
Memcached的源代码简洁明了,对于理解分布式缓存的工作原理和内存管理有很好的学习价值。通过阅读源码,可以深入了解其内部机制,如哈希表的实现、内存分配策略、网络通信细节等。 总结来说,Memcached是一个高效的...
但是,这种方式会导致内存碎片,加重操作系统内存管理器的负担,最坏的情况下, 会导致操作系统比memcached进程本身还慢。SlabAllocator就是为解决该问题而诞生的。下面来看看SlabAllocator的原理。下面是memcached...
【Memcached内存分析】 Memcached是一款高性能的分布式内存缓存系统,由LiveJournal的运营团队开发,被广泛应用于包括Facebook、mixi、Digg、Wikipedia等在内的大型网站。其设计目标是减轻数据库的压力,通过将常用...
三、Memcached的内存管理 Memcached使用slab allocator进行内存管理,将内存划分为多个slabs,每个slab包含多个固定大小的chunk。这种方式避免了内存碎片,提高了内存利用率。 四、Memcached的过期策略 Memcached...
Memcached是一种分布式内存对象缓存系统,广泛用于减轻数据库负载,提高Web应用的性能。由于是64位版本,这意味着它可以利用64位系统的内存优势,处理更大的数据量。 **Memcached简介** Memcached是一款高性能、轻...
安装magent可以帮助我们更好地管理和监控memcached服务的状态,包括查看缓存统计、设置内存限制等。安装过程类似: 1. 解压magent:`tar -zxvf magent.tar.gz` 2. 进入解压后的目录:`cd magent` 3. 编译和安装:`...