zoukankan      html  css  js  c++  java
  • 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上。内存浪费较少。
  • 相关阅读:
    fastx_toolkit软件使用说明
    转:bwa的使用方法
    转: Annovar 软件注释流程介绍
    转:linux下bwa和samtools的安装与使用
    GFF3格式
    漂浮广告窗
    CPU指令集设计RISC和CISC
    南方
    成都 夹三品
    微嵌1
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6854802.html
Copyright © 2011-2022 走看看