MemcachedClient4J测试报告

走远了吗. 提交于 2019-12-10 01:32:46

目的

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

场景

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

测试环境

mecached服务器

数量:1

系统:centos 6.4 

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

内存:4G

mecached参数:内存512M


客户端


系统:centos 6.4 

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,这个方法主要是根据节点状态来注册读写事件,经常注册事件也是一笔不少开销。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!