设为首页 收藏本站
查看: 1617|回复: 0

[经验分享] [转载]Memcache内存临界测试

[复制链接]

尚未签到

发表于 2015-8-31 09:57:40 | 显示全部楼层 |阅读模式
作者:马江涛

时间:2010-08-19

前言

此文档帮助您了解 memcache 在保存数据时,假如要保存的数据量接近 memcache 指定的最大内存时,memcache 是怎样进行数据存储的,以及怎样尽可能的提高 memcache 的命中率。

关键词:memcache 、临界、内存、memcache.php、LRU、监控


1 测试目的

探究 memcache 保存数据时,在保存的数据量接近 memcache 指定内存临界时,保存规律是怎样的?


2 测试环境


软件

版本号

说明

php

php-5.3.3


memcache

memcached Server 1.2.1

最大内存设置为 128M

apache

2.2.16


memcache.php


一个开源的 php脚本


3 测试用例


定义变量 i从 0到 3853628增加(一个 key与 value占据的空间约 50 bytes)

设置 Key为:hello+i

设置 Value为:第 i个我


循环插入键值数


4 测试结果

1) 几个截图及说明如下

1》放入第 1986718 个对象后,内存消耗 77.8M(占 memcache 指定最大内存 60.8%)


   DSC0000.jpg
  
  2》放入2880657 个对象后,内存消耗78.1m(占memcache 指定最大内存61.0%)
   DSC0001.jpg


3》放入3853630 个对象后,内存消耗78.1m(占memcache 指定最大内存61.0%)
   DSC0002.jpg

以上三个图示说明,插入的数据如果大小变化不是很大时,memcache 中的数据存储到一定的时候(占总内存60%左右时),不再消耗内存


3) 此时获取缓存中的数据


获取hello1 得到 null


获取hello1926814 得到 null 4/8 位置的数据


获取hello2408518 得到 null 5/8 位置的数据


获取hello2890221 得到 第2890221 个我 6/8 位置的数据


获取hello3853628 得到 第3853628 个我


以上数据说明,在上述情况下,内存消耗到60%左右时,memcache 就开始执行LRU 机制了。


原因分析:


1 memcached 中新的value 过来存放的地址是该value 的大小决定的,value 总是会被选择存放到chunk 与其最接近的一个slab 中,假如已经没有合适的chunk 了,那就开始LRU 了。所以,可见memcached 的LRU 不是全局的,而是针对slab 的,是区域性的。


2 memcached 的内存分配采用的是预分配方式,为了获得更快的速度,不得不以空间换时间。所以在如上情况下(插入的数据大小变化不是很大时),在内存消耗耗到60%左右时开始启用LRU 机制。其余的40%在这种场合,基本等于是浪费掉的。


3 要提高memcached 的命中率,可以通过预估我们的value 大小,然后适当的调整增长因子来实现。(通过调整增长因子 –f 1.1 表示chunk 按照1.1 倍的速度增长,可以尽可能多的拥有某种大小的chunk)


注:
memcache 的数据存储时有3 个概念:1》 slab, 2》 page, 3》 chunk


一个memcahced 进程会预先将自己划分为若干个slab,每个slab 下又有若干个page,每个page 下又有多个chunk。Slab 的数量是有限的,几个,十几个,或者几十个,这个跟进程配置的内存有关。而每个slab 下得page 默认情况是1m,也就是说如果一个slab 占用100m 得内存得话,那么默认情况下这个slab 所拥有得page 的个数就是100,而chunk 就是数据存放的最终地方。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-106676-1-1.html 上篇帖子: 关于MemCache的起源、安装过程和简单的使用方法 下篇帖子: [转载]Memcache内存临界测试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表