专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »web服务器 » memcache:memcache分析调试 »正文

memcache:memcache分析调试

来源: 发布时间:星期日, 2009年1月4日 浏览:33次 评论:0
1.有关本文档
       本文档所有分析都是在1.2版本的上,偶尔会提到比较1.1版本.其他版本没有阅读.
        个星期时间LINUX中使用是epoll,监听EPOLLIT水平触发.因此从理论上讲,memcache并发连接可以达到infinite,前提是event池和内存空间足够大.而没有和linux线程处理有关系.事实上,在后面测试中便可发现,在单结点连接压力测试时,瞬时并发连接可以达到5000多个.只是等待触发时间上长短和有效无效区别.
       在表4.2中可以清晰看到并发连接些数据.
       3.  服务端系统负载
       通过自己编写服务器端,对单结点memcache进行了连接压力测试.其中测试用例编写是这样:启用 7个客户端,每个客户端串行运行1000个进程,每个进程开3000线程,每个线程执行10次memcache读操作或者写操作(操作相同).客户端并发连接.
       1.  客户端(7)环境:Intel(R) Xeon(R) CPU 5120 @ 1.86GHz,4G memory.
       2.  服务器端(1)环境:Intel(R) Xeon(R) CPU 5120 @ 1.86GHz,4G memory.
       3.  网络环境:100M网卡,Cisco交换机.
       4.  数据记录:见表4.2和图4.2.
=insertimage title=点击在新窗口中浏览此图片 height=513 alt=点击在新窗口中浏览此图片 src="http://www.crazycoder.cn/WebFiles/20091/05b9efc3-e38a-4e9d-99db-f0df2806847c.jpg" width=573 border=0>
表4.2 memcache连接和系统负载
图4.2 memcache连接和系统负载
       很显然,memcache运行在系统cpu消耗上占十分少比重,即便是很恐怖并发连接也不会给系统带来多大负载,其磁盘IO free(所有操作都在内存中)和相应内存分配机制决定其占用cpu极少,而相反,在网络IO上却花费很大时间.
       4.  空间分配,命中率
       由于本地测试式get数据非常固定,因此命中率基本为100%.在10.68.1.31上运行了个有前端应用memcachce服务器,运行时间已经有364个多小时了.
       因此通过10.68.1.31上数据介绍说明(版本为1.1.13).通过memcache统计协议可以清楚看到其命中率高达95.9%,如表4.3所示:
=insertimage title=点击在新窗口中浏览此图片 alt=点击在新窗口中浏览此图片 src="http://www.crazycoder.cn/WebFiles/20091/65e0dbd9-cc0b-40a7-a010-de899d19a366.jpg" border=0>
表4.3 memcache空间分配和命中

5.memcache客户端编写
       1.  memcache协议
       在memcache协议中规定了Client和Server通信规则.
       在源码分析中,主要分析了update/get/del/incr/decr几类处理过程.其具体规则可以在官方文档中有介绍说明,这里做简单解释.
引用
1.  Update(/add/replace):
Client请求规则:
\r\n
\r\n
Server响应规则:
STORED\r\n 或者 NOT_STORED\r\n

其中,add,replace 3种中种;
是client请求存储键值;
是任意16bit长unsigned 值,在get操作时,也将伴随data起返回,可以用来存储某些认证信息或者描述信息;
是key-value对象消亡时间,如果为0,则代表永不消亡;
是数据长度,千万小心,这个很重要,在memcache源代码里,直接读取这个数值来当作数据长度,而不是用strlen计算.这个显而易见,数据中有可能存在/r/n符号,也就是协议中规定分隔符.如果出现,则严格按长度取数据;
也就是value值,可以包含\r\n值.

STORED代表update操作成功NOT_STORED代表update操作失败.

2.  Get(get/bget)
Client请求规则:
*\r\n
Server响应规则:
VALUE\r\n
\r\n
END\r\n

Get/bget操作可以次操作多个key值,server响应格式中关键字可以参看上面解释,END代表数据显示结束.如果没有数据,则只有个END\r\n.

3.  Delete(delete)
Client请求规则:
delete

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: