工作原理
    基本概念: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优化方法的更多相关文章

  1. redmine在linux上的mysql性能优化方法与问题排查方案

    iredmine的linux服务器mysql性能优化方法与问题排查方案     问题定位:   客户端工具: 1. 浏览器inspect-tool的network timing工具分析   2. 浏览 ...

  2. DB-SQL-MySQL-杂项-调优:Mysql千万以上数据优化、SQL优化方法

    ylbtech-DB-SQL-MySQL-杂项-调优:Mysql千万以上数据优化.SQL优化方法 1.返回顶部 1. 1,单库表别太多,一般保持在200以下为宜 2,尽量避免SQL中出现运算,例如se ...

  3. 提升网速的路由器优化方法(UPnP、QoS、MTU、交换机模式、无线中继)

    在上一篇<为什么房间的 Wi-Fi 信号这么差>中,猫哥从微波炉.相对论.人存原理出发,介绍了影响 Wi-Fi 信号强弱的几大因素,接下来猫哥再给大家介绍几种不用升级带宽套餐也能提升网速的 ...

  4. php-fpm优化方法详解

    php-fpm优化方法 php-fpm存在两种方式,一种是直接开启指定数量的php-fpm进程,不再增加或者减少:另一种则是开始时开启一定数量的php-fpm进程,当请求量变大时,动态的增加php-f ...

  5. 30多条mysql数据库优化方法,千万级数据库记录查询轻松解决(转载)

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  6. Android中ListView的几种常见的优化方法

    Android中的ListView应该算是布局中几种最常用的组件之一了,使用也十分方便,下面将介绍ListView几种比较常见的优化方法: 首先我们给出一个没有任何优化的Listview的Adapte ...

  7. php-fpm进程数优化方法

    原文地址:https://www.douban.com/note/315222037/ 背景最近将Wordpress迁移至阿里云.由于自己的服务器是云服务器,硬盘和内存都比较小,所以内存经常不够使,通 ...

  8. DevExpress ChartControl大数据加载时有哪些性能优化方法

    DevExpress ChartControl加载大数据量数据时的性能优化方法有哪些? 关于图表优化,可从以下几个方面解决: 1.关闭不需要的可视化的元素(如LineMarkers, Labels等) ...

  9. Tomcat从内存、并发、缓存方面优化方法

    Tomcat有很多方面,从内存.并发.缓存四个方面介绍优化方法.   一.Tomcat内存优化 Tomcat内存优化主要是对 tomcat 启动参数优化,我们可以在 tomcat 的启动脚本 cata ...

随机推荐

  1. vue-music:歌词的其他功能

    由于歌词的播放需要歌曲播放,切换歌曲,歌曲的播放模式等等有关联,因此,需要在这几处处理相关问题 1.循环播放回不到开始位置 loop() { this.$refs.audio.currentTime ...

  2. CSS3-文本-text-shadow

    一.text-shadow 语法: text-shadow : none | <length> none | [<shadow>, ] * <shadow> 或no ...

  3. (转)UIPanGestureRecognizer

    UIPanGestureRecognizer是UIGestureRecognizer类的一个扩展类,其扩展类有UITapGestureRecognizer,UIPinchGestureRecogniz ...

  4. [SQL server] IF ELSE 和 CASE WHEN 的用法

    /*判断一个数如果大于10,按10统计,如果小于0,按0统计*/ --方法a DECLARE @AA INT SET @AA=15 IF @AA>10 SELECT 10 ELSE IF @AA ...

  5. ctype.h 第2章

    ctype.h ctype.h是c标准函数库中的头文件   定义了一批c语言字符分类函数   (c character classification functions) 用于测试字符是否属于特定的字 ...

  6. numpy.clip(a, a_min, a_max, out=None)(values < a_min are replaced with a_min, and those > a_max with a_max.)

    numpy.clip(a, a_min, a_max, out=None) Clip (limit) the values in an array. Given an interval, values ...

  7. 有关git的配置

    git版本控制器总结 关于部分内容请参考:https://www.cnblogs.com/smuxiaolei/p/7484678.htmlgit是一个版本控制器,分布式管理:可以记录每次文件的改动, ...

  8. HDU——2112HDU Today(SPFA+简单Hash或map+前向星)

    HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  9. [LA3620]Manhattan Wiring

    [LA3620]Manhattan Wiring 试题描述 输入 输出 输入示例 输出示例 数据规模及约定 见“输入” 题解 我们把“连线”的过程改为“铺地砖”的过程,总共有 11 种地砖,每种地砖上 ...

  10. 学习系列 - 马拉车&扩展KMP

    Manacher(马拉车)是一种求最长回文串的线性算法,复杂度O(n).网上对其介绍的资料已经挺多了的,请善用搜索引擎. 而扩展KMP说白了就是是求模式串和主串的每一个后缀的最长公共前缀[KMP更像是 ...