memcached 内存满了内存满了会自动扩充吗

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(2510)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'memcache 存储单个KEY,数据量过大的时候性能慢!以及简单的memcache不适合用到的场景。',
blogAbstract:'公司目前大大小小的项目全部使用的是memcache,最近发现存储游戏服务器memcache突然失效,而且连接缓存获取数据越来越低,决定进一步研究memcache查阅资料过程中发现写比较好的一篇博文:.cn/s/blog_721cdtb.html
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}温馨提示:
memcached全面剖析–2.理解memcached的内存存储
发布: 网络|
浏览: 1405
$ memcached -f 2 -vvslab class & 1: chunk size & &128 perslab &8192slab class & 2: chunk size & &256 perslab &4096slab class & 3: chunk size & &512 perslab &2048slab class & 4: chunk size & 1024 perslab &1024slab class & 5: chunk size & 2048 perslab & 512slab class & 6: chunk size & 4096 perslab & 256slab class & 7: chunk size & 8192 perslab & 128slab class & 8: chunk size &16384 perslab & &64slab class & 9: chunk size &32768 perslab & &32slab class &10: chunk size &65536 perslab & &16slab class &11: chunk size 131072 perslab & & 8slab class &12: chunk size 262144 perslab & & 4slab class &13: chunk size 524288 perslab & & 2slab class & 1: chunk size & & 88 perslab 11915slab class & 2: chunk size & &112 perslab &9362slab class & 3: chunk size & &144 perslab &7281slab class & 4: chunk size & &184 perslab &5698slab class & 5: chunk size & &232 perslab &4519slab class & 6: chunk size & &296 perslab &3542slab class & 7: chunk size & &376 perslab &2788slab class & 8: chunk size & &472 perslab &2221slab class & 9: chunk size & &592 perslab &1771slab class &10: chunk size & &744 perslab &1409$ telnet 主机名 端口号$ telnet localhost 11211Trying ::1...Connected to localhost.Escape character is '^]'.statsSTAT pid 481STAT uptime 16574STAT time STAT version 1.2.5STAT pointer_size 32STAT rusage_user 0.102297STAT rusage_system 0.214317STAT curr_items 0STAT total_items 0STAT bytes 0STAT curr_connections 6STAT total_connections 8STAT connection_structures 7STAT cmd_get 0STAT cmd_set 0STAT get_hits 0STAT get_misses 0STAT evictions 0STAT bytes_read 20STAT bytes_written 465STAT limit_maxbytes STAT threads 4ENDquit$ memstat --servers=server1,server2,server3,...$ memcached-tool 主机名:端口 选项$ memcached-tool 主机名:端口 # &Item_Size & Max_age &1MB_pages Count & Full? 1 & & 104 B &1394292 s & &8 & &yes 2 & & 136 B &1456795 s & & &52 &400919 & & yes 3 & & 176 B &1339587 s & & &33 &196567 & & yes 4 & & 224 B &1360926 s & & 109 &510221 & & yes 5 & & 280 B &1570071 s & & &49 &183452 & & yes 6 & & 352 B &1592051 s & & &77 &229197 & & yes 7 & & 440 B &1517732 s & & &66 &157183 & & yes 8 & & 552 B &1460821 s & & &62 &117697 & & yes 9 & & 696 B &1521917 s & & 143 &215308 & & yes10 & & 872 B &1695035 s & & 205 &246162 & & yes11 & & 1.1 kB 1681650 s & & 233 &221968 & & yes12 & & 1.3 kB 1603363 s & & 241 &183621 & & yes13 & & 1.7 kB 1634218 s & & &94 & 57197 & & yes14 & & 2.1 kB 1695038 s & & &75 & 36488 & & yes15 & & 2.6 kB 1747075 s & & &65 & 25203 & & yes16 & & 3.3 kB 1760661 s & & &78 & 24167 & & yes本文链接:,转自:
如非特别注明,本站内容均为原创,转载请务必注明作者和原始出处。
本文地址:
DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,本教程带你入门学习dubbo框架的相关知识
RabbitMQ是一个开源的,在AMQP基础上完整的,可复用的企业消息系统。支持主流的操作系统,Linux、Windows、MacOX等。多种开发语言支持,Java、Python、Ruby、.NET、PHP、C/C++、node.js等。本教程带你学习RabbitMQ环境搭建、RabbitMQ简单队列、work队列、发布订阅消息、各种Exchange应用、与spring整合等
本教程详细讲解Java8的新特新,结合简单的示例代码来讲解如何使用默认接口方法,lambda表达式,方法引用以及多重Annotation,同时你将会学到JAVA8最新的API上的改进,比如流,函数式接口,Map以及全新的日期API
WebSocket 规范的目标是在浏览器中实现和服务器端双向通信.双向通信可以拓展浏览器上的应用类型,例如实时的数据推送(股票行情),游戏,聊天/im 等.本教程通过java简单的示例带你快速学会WebSocket编程
JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互。本专题详细讲解json、jackson、fastjson等工具包的操作教程
Struts2,Struts2教程,Struts2学习,Struts2实例,Struts2视频教程
Hibernate,Hibernate教程,Hibernate学习,Hibernate实例,Hibernate视频教程
spring,spring教程,spring学习,spring实例,spring视频教程
java,视频教程,java视频教程,java web 视频教程,java基础视频教程
junit基本介绍,hamcrest和testSuite介绍,基于测试开发讲解和cobertura框架介绍,stub和mock简介,dbunit的使用,dbunit实际运用,easymock的使用,easymock的实际应用,利用easymock测试简单的servlet,cactus的使用,基于Jetty的cactus的使用
国际化(internationalization)又称为 i18n(读法为i 18 n,据说是因为internationalization(国际化)这个单词从i到n之间有18个英文字母,i18n的名字由此而来)
freemarker是现在企业中用得最多的模板引擎,可以根据模板生成相当的静态页面等
大家都在看rowan 的BLOG
用户名:rowan
访问量:1942
注册日期:
阅读量:5863
阅读量:12276
阅读量:379434
阅读量:1071887
[匿名]Ankh:
51CTO推荐博文
今天上线后发现一台MYSQL的从库连接数突然变高,发现有一条SQL语句反复在执行,跟程序后发现应该走memcache缓存的,但是没写进去,DEBUG后发现要存储的内容达到8M,而memcache最大允许1m的数据采用最新的PHP的memcached扩展,最新的扩展会把数据进行压缩$cache&=&new&memcahed();&&
$data&=&str_repeat('a',&);&//1M的数据&&
$r&&=&&$cache-&set('key',&$data,&9999);&&
$data&=&str_repeat('a',&*100);//100M的数据&&
$r&&=&&$cache-&set('key',&$data,&9999);不论是1M的数据还是100M的数据,都能set成功。memcachedset数据的时候是默认压缩的。由于这个这个是重复的字符串,压缩率高达1000倍。因此100M的数据压缩后实际也就100k而已。如果程序是这样$cache-&setOption(memcahed::OPT_COMPRESSION,0);&//不压缩存储数据。&&
$data&=&str_repeat('a',&);&//1M数据&&
$r&&=&&$cache-&set('key',&$data,&9999);//1M的数据set不成功。也就是说memcached server不能存储超过1M的数据,但是经过客户端压缩数据后,只要小于1M的数据都能存储成功。单个item的大小被限制在1M byte之内Memcached的内存存储引擎,使用slabs来管理内存。内存被分成大小不等的slabs
chunks(先分成大小相等的slabs,然后每个slab被分成大小相等chunks,不同slab的chunk大小是不相等的)。chunk的大小
依次从一个最小数开始,按某个因子增长,直到达到最大的可能值。如果最小值为400B,最大值是1MB,因子是1.20,各个slab的chunk的大小
依次是:slab1 - 400B;slab2 - 480B;slab3 - 576B
...slab中chunk越大,它和前面的slab之间的间隙就越大。因此,最大值越大,内存利用率越低。Memcached必须为每个slab预先分
配内存,因此如果设置了较小的因子和较大的最大值,会需要为Memcached提供更多的内存。不要尝试向memcached中存取很大的数据,因为将大数据load和unpack到内存中需要花费很长的时间,从而导致系统的***能反而不好。如果确实需要存储大于1MB的数据,可以修改
slabs.c:POWER_BLOCK的值,然后重新编译memcached;或者使用低效的malloc/free。另外,可以使用数据库、
MogileFS等方案代替Memcached系统。memcached能接受的key的最大长度是250个字符memcached能接受的key的最大长度是250个字符。需要注意的是,250是memcached服务器端内部的限制。如果使用的
Memcached客户端支持"key的前缀"或类似特***,那么key(前缀+原始key)的最大长度是可以超过250个字符的。推荐使用较短的key,
这样可以节省内存和带宽。memcached对item的过期时间有什么限制?一个item对象的过期时间最长可以达到30天。memcached把传入的过期时间(时间段)解释成时间点后,一旦到了这个时间点,memcached就把item置为失效状态,这是一个简单但obscure的机制。memcached的内存分配器是如何工作的?为什么不适用malloc/free!?为何要使用slabs?实际上,这是一个编译时选项。默认会使用内部的slab分配器,而且确实应该使用内建的slab分配器。最早的时候,memcached只使用
malloc/free来管理内存。然而,这种方式不能与OS的内存管理以前很好地工作。反复地malloc/free造成了内存碎片,OS最终花费大量
的时间去查找连续的内存块来满足malloc的请求,而不是运行memcached进程。slab分配器就是为了解决这个问题而生的。内存被分配并划分成
chunks,一直被重复使用。因为内存被划分成大小不等的slabs,如果item的大小与被选择存放它的slab不是很合适的话,就会浪费一些内存。memcached是原子的吗?所
有的被发送到memcached的单个命令是完全原子的。如果您针对同一份数据同时发送了一个set命令和一个get命令,它们不会影响对方。它们将被串
行化、先后执行。即使在多线程模式,所有的命令都是原子的。然是,命令序列不是原子的。如果首先通过get命令获取了一个item,修改了它,然
后再把它set回memcached,系统不保证这个item没有被其他进程(process,未必是操作系统中的进程)操作过。memcached
1.2.5以及更高版本,提供了gets和cas命令,它们可以解决上面的问题。如果使用gets命令查询某个key的item,memcached会返
回该item当前值的唯一标识。如果客户端程序覆写了这个item并想把它写回到memcached中,可以通过cas命令把那个唯一标识一起发送给
memcached。如果该item存放在memcached中的唯一标识与您提供的一致,写操作将会成功。如果另一个进程在这期间也修改了这个
item,那么该item存放在memcached中的唯一标识将会改变,写操作就会失败。不能够遍历memcached中所有的item这
个操作的速度相对缓慢且阻塞其他的操作(这里的缓慢时相比memcached其他的命令)。memcached所有非调试(non-debug)命令,例
如add, set, get,
fulsh等无论memcached中存储了多少数据,它们的执行都只消耗常量时间。任何遍历所有item的命令执行所消耗的时间,将随着
memcached中数据量的增加而增加。当其他命令因为等待(遍历所有item的命令执行完毕)而不能得到执行,因而阻塞将发生。
了这篇文章
类别:未分类┆阅读(0)┆评论(0)17126人阅读
memcached(1)
memcached的基本设置:
-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助
mixi的设置,单台:
每台memcached服务器仅启动一个memcached进程。分配给memcached的内存为3GB,启动参数如下:
/usr/bin/memcached -p 11211 -u nobody -m 3000 -c 30720
由于使用了x86_64的操作系统,因此能分配2GB以上的内存。32位操作系统中,每个进程最多只能使用2GB内存。也曾经考虑过启动多个分配2GB以下内存的进程,但这样一台服务器上的TCP连接数就会成倍增加,管理上也变得复杂,所以mixi就统一使用了64位操作系统。
另外,虽然服务器的内存为4GB,却仅分配了3GB,是因为内存分配量超过这个值,就有可能导致内存交换(swap)。连载的第2次中前坂讲解过了memcached的内存存储“slab allocator”,当时说过,memcached启动时指定的内存分配量是memcached用于保存数据的量,没有包括“slab allocator”本身占用的内存、以及为了保存数据而设置的管理空间。因此,memcached进程的实际内存分配量要比指定的容量要大,这一点应当注意。
mixi保存在memcached中的数据大部分都比较小。这样,进程的大小要比指定的容量大很多。因此,我们反复改变内存分配量进行验证,确认了3GB的大小不会引发swap,这就是现在应用的数值。
memcached -d -m 1024 -u root -l 172.25.38.70 -p 12000 -c 4096 -P /tmp/memcached.pid&& 12000
-p 12000 端口
-m 1024&&内存设置 1024
-c 4096&&同时连接数
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:107418次
积分:1338
积分:1338
排名:千里之外
原创:22篇
转载:51篇
评论:10条
(3)(2)(1)(1)(1)(1)(1)(1)(1)(1)(1)(3)(1)(1)(1)(5)(1)(3)(2)(2)(3)(1)(10)(20)(1)(3)(1)(2)

我要回帖

更多关于 memcached 内存满了 的文章

 

随机推荐