主要是了解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_NODELAY为true io worker为cpus个数
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,这个方法主要是根据节点状态来注册读写事件,常常注册事件也是一笔很多开销。