• 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上。内存浪费较少。
  • 相关阅读:
    AJAX
    Aliyun服务器配置Redis
    Aliyun服务器配置MySQL
    Python基础之迭代器详解
    Python基础之函数
    Flask入门--URL
    认识Web
    肖知兴:企业的底层逻辑与企业家的突破(下)
    建造者模式(Bulider模式)详解
    为什么我强烈推荐你用枚举来实现单例模式
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6854802.html
Copyright © 2020-2023  润新知