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>>>>>>>>>>>>>>>>>>>>>>>>>>>
相关文章
读者评论
发表评论
|
|