memcached优化方法

Posted cxchanpin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了memcached优化方法相关的知识,希望对你有一定的参考价值。

工作原理
    基本概念: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上。内存浪费较少。




以上是关于memcached优化方法的主要内容,如果未能解决你的问题,请参考以下文章

mysql优化方法陈列

宝塔环境启用 Redis 内存缓存教程,优化加速 WordPress 站点

网站优化

PHP环境下Memcache的使用方法

memcached优化方案实例

Memcache技术分享:介绍使用存储算法优化命中率