MemcachedClient4J测试报告

目的

主要是了解MemcachedClient4J实际性能,对下步优化提供依据 react

场景

采用跟spymecached对比测试,分别在大负荷的状况下,观察二者性能表现,主要观察指标有耗时和出错率。 centos

测试环境

mecached服务器 服务器

数量:1 多线程

系统:centos 6.4  框架

cpu:Intel(R) Core(TM) i3-2120 CPU @ 3.30GHz memcached

内存:4G 性能

mecached参数:内存512M 测试


客户端 优化


系统:centos 6.4  spa

cpu:Intel(R) Core(TM) i3-2120 CPU @ 3.30GHz

内存:4G

jdk:1.6.0_38-b05


Netty :     3.7.0.Final  设置TCP_NODELAYtrue  io workercpus个数

测试结果



结论和分析

MemcahcedClient4J在一样的压力下表现比spymemcached较好,但差距不是很大,这也是我意料之中。memcachedClient4J所使用的netty框架是支持多线程worker,测试只有一个memcached节点,实际上全部读写处理仍是由同一个worker线程处理,跟单线程nio的spymemcached基本处理同一个等级水平。可是netty对IO写都有一个小优化,一般的NIO写操做都是放入一个缓冲队列,等待reactor去写。在队列为空的状况下,netty都会直接调用channel.write,而非放入缓冲队列注册OP_WRITE,减小了线程切换和注册事件的开销。这个优化的前提是写的线程就是Reactor线程,不然若是是用户线程,用户线程的的中断会引发channel的关闭。spymecache代码很是复杂,每一个节点要维护三个队列(inputQueue,writeQueue,readQueue),三个队列数据变化都要调用fixupOPS,这个方法主要是根据节点状态来注册读写事件,常常注册事件也是一笔很多开销。

相关文章
相关标签/搜索